我有一个问题,有些值没有在我的XML文件中声明为XML元素。但为了进一步处理,我需要它们是一个元素。例子:
<A>
<B id="254">
12.34
<C>Lore</C>
<D>9</D>
</B>
</A>
最后,XML文件应该像这样:
<A>
<B id="254">
<Z>12.34</Z>
<C>Lore</C>
<D>9</D>
</B>
</A>
与stackoverflow.com/q/75586178/407651的不同之处在于,在这个问题中,xml元素位于纯文本的前面。在解决方案中使用了该特性。在那里溶液不能使用。
下面是lxml中insert
的一个选项:
from lxml import etree
tree = etree.parse("input.xml")
for b in tree.xpath("//B"):
z = etree.Element("Z")
z.text = b.text.strip()
b.text = "" # <-- cut the actual value
b.insert(0, z) # <-- paste it inside the <Z>
tree.write("output.xml", encoding="UTF-8", xml_declaration=True)
输出:
<?xml version="1.0" encoding="UTF-8"?>
<A>
<B id="254">
<Z>12.34</Z>
<C>Lore</C>
<D>9</D>
</B>
</A>