Python 只重命名 xml 中许多节点中的第一个节点



im 正在研究从 REST API 获取 XML 文件的 Python 解决方案。 虽然我可以轻松地从软件映射常规字段,但它们的自定义字段需要一些工作。

目前让我困惑的问题是XML文件看起来像这样。

<Label>zip</Label>
<Value>6230</Value>
<Label>city</Label>
<Value>Rødekro</Value>
<Label>country</Label>
<Value>Danmark</Value>
<Label>date</Label>
<Value>09/20/2018</Value>

我需要的是以下内容。

<zip>6230</zip>
<city>Rødekro</city>
<country>Danmark</country>
<date>09/20/2018</date>

有没有办法选择单个值节点并以某种方式重命名它们?

解决方案中问题的示例 阅读评论以获取完整故事。

<a>
<b>
<Label>zip</Label>
<Value>6230</Value>
<Label>city</Label>
<Value>Rødekro</Value>
<Label>country</Label>
<Value>Danmark</Value>
<c>something</c>
<Label>date</Label>
<Value>09/20/2018</Value>
</b>
</a>

您可以使用 ElementTree 迭代器来遍历节点。

import xml.etree.ElementTree as ET
tree = ET.parse('temp.xml')
root = tree.getroot()
new_root = ET.Element('address')
it = root.iter()
next(it)
for x in it:
# skip nodes here or you can add to tree as it is.
if x.tag != 'Label':
continue
child = ET.SubElement(new_root, x.text)
child.text = next(it).text
print(ET.tostring(new_root))

我用了这个"临时.xml">

<address>
<Label>zip</Label>
<Value>6230</Value>
<Label>city</Label>
<Value>Rødekro</Value>
<Label>country</Label>
<Value>Danmark</Value>
<c>NOT NEED</c>
<Label>date</Label>
<Value>09/20/2018</Value>
</address>

您可以使用 XSLT(可扩展样式表语言转换(转换 XML 文件。lxml 库是一个众所周知的库,适用于此目的。由于您的节点没有特定名称,因此您必须依赖节点内容(例如zip和国家/地区(,并从下一个节点获取相关值(Value(。

相关内容