Wih ElementTree,我可以打印每次出现的特定标签(在我的情况下为ExpertSettingsSg
):
#!/usr/bin/env python3
import xml.etree.ElementTree as ET
root = ET.parse('mydoc.xml').getroot()
for children in root:
value=children.findall('.//ExpertSettingsSg')#tag I'm looking for
for settings in value:
if settings.text is not None:
print(settings.text)
但是我没有找到打印事件发生路径的方法。因为我的XML文件具有多个级别,并且ExpertSettingsSg
几乎可以位于每个级别,所以我需要知道ExpertSettingsSg
的来源。我在寻找类似
配置xxxxxx的路径= / root / xxx / aaaa / bbbb
如果ElementTree无法实现,那么还有其他库可以实现吗?
谢谢
而不是ElementTree,您应该使用具有getpath的lxml方法。
示例:作为我使用的源XML:
txt ='''<main>
<x>
<a>
<ExpertSettingsSg id="1">x1</ExpertSettingsSg>
</a>
<b>
<dummy>xxxx</dummy>
</b>
</x>
<y>
<c>
<dummy>xxxx</dummy>
</c>
<d>
<ExpertSettingsSg id="2">x2</ExpertSettingsSg>
</d>
<e>
<ExpertSettingsSg id="3"/>
</e>
</y>
</main>'''
代码:
from lxml import etree as et
tree = et.fromstring(txt)
root = tree.getroottree()
for node in root.findall('.//ExpertSettingsSg'):
tt = node.text
if tt is not None:
print(node.attrib['id'], tt, root.getpath(node))
结果是:
1 x1 /main/x/a/ExpertSettingsSg
2 x2 /main/y/d/ExpertSettingsSg