2016-01-17 29 views
0

我使用xml.etree.ElementTree来读取包含团队及其成员列表的xml文件。我想访问一个成员名称。在python中读取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是非常有效的。有什么办法吗?

回答

0

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