使用ElementTree查找路径

问题描述 投票:0回答:1

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无法实现,那么还有其他库可以实现吗?

谢谢

python-3.x xml elementtree
1个回答
0
投票

而不是ElementTree,您应该使用具有getpathlxml方法。

示例:作为我使用的源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
© www.soinside.com 2019 - 2024. All rights reserved.