Lxml:文字中的&符号

时间:2015-04-28 14:54:34

标签: python xml parsing lxml ampersand

我使用lxml

时遇到问题

我正在使用lxml解析xml文件并再次将其写回新的xml文件。

输入文件:

<tag1>
  <tag2 attr1="a1">&quot; example text &quot;</tag2>
  <tag3>
    <tag4 attr2="a2">&quot; example text &quot;</tag4>
    <tag5>
      <tag6 attr3="a3">&apos; example text &apos;</tag6>
    </tag5>
  </tag3>
</tag1>

脚本:

    from lxml import etree
    parser = etree.XMLParser(remove_comments=False,strip_cdata=False,resolve_entities=False)
    tree = etree.parse("input.xml")
    tree.write("out.xml")

输出:

<tag1>
  <tag2 attr1="a1"> " example text "  </tag2>
  <tag3>
    <tag4 attr2="a2"> " example text " </tag4>
    <tag5>
      <tag6 attr3="a3"> ' example text ' </tag6>
    </tag5>
  </tag3>
</tag1>

我想保留&quot;&apos;。我甚至尝试过使用

f = open('output.xml', 'w')
f.write(etree.tostring(tree1.getroot(),encoding="UTF-8",xml_declaration=False))
f.close()

但他们都没有解决这个问题。

然后我尝试手动替换“&quot;

root = tree.getroot()
tag_elements = root.iter()
for tag in tag_elements:
        tag_text = tag.text
        if tag_text is not None:
               tag_text1 = tag_text.replace("\"","&quot;")
               tag.text = tag_text1

但这给出了以下输出

<tag1>
  <tag2 attr1="a1"> &amp;quot; example text &amp;quot;  </tag2>
  <tag3>
    <tag4 attr2="a2"> &amp;quot; example text &amp;quot; </tag4>
    <tag5>
      <tag6 attr3="a3"> &apos; example text &apos; </tag6>
    </tag5>
  </tag3>
</tag1>

它取代了&amp;与&amp;。我在这里很困惑。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

&amp;是字符&的xml编码。 &quot;是字符"的xml编码。字符"'不需要编码,因此lxml不会对它们进行编码。

您是否尝试过再次解码文档?它应该像你期望的那样工作。如果需要再次对文档中的字符串进行编码(将&转换为&amp;等),请在生成新的xml文档之前使用lxml树中的各个字符串进行编码。