I am using xml.etree.ElementTree
to read an xml file which contains a list of teams and its members. I want to access a member name.
-<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>
I use the codes below to get member name:
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)
These codes solve problem partially. Indeed, It is much efficient to access the tag member1 directly. Is there any way?
xml.etree.ElementTree
has a limited XPath support but it is enough in this case:
for name in root.findall(".//team/members/*/style"):
print(name.text)
Demo:
>>> 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