当前位置: 首页 > 面试题库 >

如何防止xml.ElementTree fromString丢弃commentNode

牟飞沉
2023-03-14
问题内容

我有以下代码片段:

    from xml.etree.ElementTree import fromstring,tostring
    mathml = fromstring(input)
    for elem in mathml.getiterator():
        elem.tag = 'm:' + elem.tag
    return tostring(mathml)

当我输入以下内容时input

<math>
  <a> 1 2 3 </a>  <b />
<foo>Uitleg</foo>
<!-- <bar> -->
</math>

结果是:

<m:math>
  <m:a> 1 2 3 </m:a>  <m:b />
<m:foo>Uitleg</m:foo>

</m:math>

怎么来的?我如何保留评论?

编辑 :我不在乎使用的确切xml库,但是,我应该能够对标记进行粘贴的更改。不幸的是,lxml似乎不允许这样做(而且我无法使用正确的名称空间操作)


问题答案:

您不能使用xml.etree,因为它的解析器会忽略注释(顺便说一下,这对于xml解析器来说是可以接受的行为)。但是,如果您使用(兼容)lxml库,则可以使用它,它允许您配置解析器选项。

from lxml import etree

parser = etree.XMLParser(remove_comments=False)
tree = etree.parse('input.xml', parser=parser)
# or alternatively set the parser as default:
# etree.set_default_parser(parser)

到目前为止,这将是最简单的选择。如果确实需要使用xml.etree,则可以尝试连接自己的解析器,尽管即使这样,注释也未得到正式支持:看看这个示例(来自xml.etree的作者)(似乎仍然可以使用) python 2.7)



 类似资料:
  • 问题内容: 我正在使用Jsoup清理来自表单的用户输入。有问题的表单包含一个要求纯文本的表单。提交表单后,我使用; 清除输入。但是,由于html会忽略多余的空格,因此将从输入中删除有价值的空格字符。 例如,如果有人在中输入了一些文本行: 之后,您将拥有: 如何使保留空白?我知道它是为解析html而设计的,而不是html,因此还有更好的选择吗? 问题答案: 如果您的textarea只希望使用纯文本,

  • 我将事件发送到AWS Kinesis,这些事件由AWS lambda函数处理。但是,如果lambda抛出一些错误,则不会丢弃记录,并且会一次又一次地进行处理,从而阻止处理新记录。 我宁愿跳过错误的记录,消化新的记录。我不知道该怎么做。 lambda函数捕获任何异常,因此不应给出任何执行错误。 下面是python中的片段。 我知道lambda应该在“保留”期间重试(默认为24小时),但我希望放弃并最

  • 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)[1] 来应对过拟合问题。丢弃法有一些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。 方法 回忆一下,“多层感知机”一节的图3.3描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元$h_i$($i=1, \ldots, 5$)的计算表达式为 $$h_i = \p

  • Google数据丢失预防API支持.pdf还是.docx?我正在尝试在Java中对*.pdf文件做缩减,以隐藏敏感数据。 多谢!EMI

  • 这个问题只是为了让我理解这个概念。空值怎么能转换成(可丢弃的)?null不是一个类,对吗?这个问题可能很愚蠢。 我知道:

  • 错误:getMore命令失败:{“operationtime”:Timestamp(1547144095,335),“ok”:0,“errmsg”:“未能在$convert中解析objectId”,没有onError值:>解析到OID的字符串长度无效,预期为24,但找到0“,”code“:241,”codename“:”conversionfailure“,”$clustertime“:{”clu