读取 python 中 xml 节点值的子元素

Read subelement of node values of an xml in python

我正在使用 xml.etree.ElementTree 读取 xml 文件,其中包含团队及其成员的列表。我想访问会员名

-<xml>
    -<teams>
        -<team>
            -<members>
               -<member1>
                   <style>Name1</style>
               </member1>
               -<member2>
                   <style>Name2</style>
               </member2>
               -<member3>
                   <style>Name3</style>
               </member3>
             </members>
        -</team>
        -<team>
        …
        -<team>
        -</team>
        …
        -<team>
        -</team>
    -</teams>
-</xml>

我使用下面的代码获取会员名称:

    import xml.etree.ElementTree as ET 
    tree = ET.parse(infile)
    root = tree.getroot()
    for child in root[0]:
        for node in child:
            if node.tag=="members":
                for _member in node.iter("style"):
                    print(_member.text)

这些代码部分解决了问题。确实,直接访问标签 member1 效率更高。有什么办法吗?

xml.etree.ElementTree 对 XPath 的支持有限,但在这种情况下就足够了:

for name in root.findall(".//team/members/*/style"):
    print(name.text)

演示:

>>> import xml.etree.ElementTree as ET
>>> 
>>> tree = ET.parse("test.xml")
>>> root = tree.getroot()
>>> 
>>> for name in root.findall(".//team/members/*/style"):
...     print(name.text)
... 
Name1
Name2
Name3