Python Elementtree 通过属性值访问子元素
我想知道怎么用Python和ElementTree来找到一个属性值为“test5”的标签,然后再找到它的子标签“loc”和“rot”。
接下来,我想把“loc”里面的x、y、z每个值都存到不同的变量里。
<item name="test1">
<loc x="0" y="0" z="0"/>
<rot x="1" y="0" z="0" radian="0"/>
</item>
<item name="test2">
<loc x="22" y="78.7464" z="109.131"/>
<rot x="-1" y="0" z="0" radian="1.35263"/>
</item>
<item name="test3">
<loc x="-28" y="-106.911" z="71.0443"/>
<rot x="0" y="0.779884" z="-0.625923" radian="3.14159"/>
</item>
<item name="test4">
<loc x="38" y="51.6772" z="94.9353"/>
<rot x="1" y="0" z="0" radian="0.218166"/>
</item>
<item name="test5">
<loc x="-38" y="-86.9568" z="64.2009"/>
<rot x="0" y="-0.108867" z="0.994056" radian="3.14159"/>
</item>
我试过很多种方法,但就是不知道该怎么做。
1 个回答
2
这是一种实现方法:
>>> import xml.etree.ElementTree as ET
>>> data = '''<root>
... <item name="test1">
... <loc x="0" y="0" z="0"/>
... <rot x="1" y="0" z="0" radian="0"/>
... </item>
... <item name="test2">
... <loc x="22" y="78.7464" z="109.131"/>
... <rot x="-1" y="0" z="0" radian="1.35263"/>
... </item>
... <item name="test3">
... <loc x="-28" y="-106.911" z="71.0443"/>
... <rot x="0" y="0.779884" z="-0.625923" radian="3.14159"/>
... </item>
... <item name="test4">
... <loc x="38" y="51.6772" z="94.9353"/>
... <rot x="1" y="0" z="0" radian="0.218166"/>
... </item>
... <item name="test5">
... <loc x="-38" y="-86.9568" z="64.2009"/>
... <rot x="0" y="-0.108867" z="0.994056" radian="3.14159"/>
... </item>
... </root>'''
>>> tree = ET.fromstring(data)
>>> for child in tree.findall("./item[@name='test5']/"):
... print child.tag, child.attrib
...
这样做会得到:
loc {'y': '-86.9568', 'x': '-38', 'z': '64.2009'}
rot {'y': '-0.108867', 'x': '0', 'z': '0.994056', 'radian': '3.14159'}
它使用了XPath表示法来访问你感兴趣的元素。此外,child.attrib
是一个字典。你可以通过child.attrib['x']
等方式来获取x、y和z
的值。