我使用lxml
时遇到问题我正在使用lxml解析xml文件并再次将其写回新的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>
脚本:
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>
我想保留"
和'
。我甚至尝试过使用
f = open('output.xml', 'w')
f.write(etree.tostring(tree1.getroot(),encoding="UTF-8",xml_declaration=False))
f.close()
但他们都没有解决这个问题。
然后我尝试手动替换“"
。
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("\"",""")
tag.text = tag_text1
但这给出了以下输出
<tag1>
<tag2 attr1="a1"> &quot; example text &quot; </tag2>
<tag3>
<tag4 attr2="a2"> &quot; example text &quot; </tag4>
<tag5>
<tag6 attr3="a3"> ' example text ' </tag6>
</tag5>
</tag3>
</tag1>
它取代了&amp;与&
。我在这里很困惑。请帮我解决这个问题。
答案 0 :(得分:0)
&
是字符&
的xml编码。 "
是字符"
的xml编码。字符"
和'
不需要编码,因此lxml不会对它们进行编码。
您是否尝试过再次解码文档?它应该像你期望的那样工作。如果需要再次对文档中的字符串进行编码(将&
转换为&
等),请在生成新的xml文档之前使用lxml树中的各个字符串进行编码。