我是新手,所以请耐心等待。
使用 ETree 和 Python 2.7,我试图解析一个我没有生成的大型 XML 文件。基本上,该文件包含包含在大量体积中的体素组。一般格式为:
<things>
<parameters>
<various parameters>
</parameters>
<thing id="1" comment="thing1">
<nodes>
<node id="1" x="1" y="1" z="1"/>
<node id="2" x="2" y="2" z="2"/>
</nodes>
<edges>
<edge source="1" target="2"/>
</edges>
</thing>
<thing id="N" comment="thingN">
<nodes>
<node id="3" x="3" y="3" z="3"/>
<node id="4" x="4" y="4" z="4"/>
</nodes>
<edges>
<edge source="3" target="4"/>
</edges>
</thing>
<comments>
<comment node="1" content="interesting feature"/>
<comment node="4" content="interesting feature"/>
</comments>
</things>
“节点”包含体素的坐标,“事物”是一组体素。 “评论”用于突出显示感兴趣的节点。
我可以使用 find 命令找到单个“节点 ID”的属性,例如:
for elem in things.iterfind('thing/nodes/node[@id="221"]'):
x = int(elem.get('x'))
我希望能够确定任何“节点 ID”所属的“事物 ID”(例如,节点 3 在事物 N 中)。我知道我可以使用 for 循环来执行此操作,遍历事物然后遍历节点,但我认为应该有某种方法可以通过从子节点中找到父节点来更简单地完成此操作。
我已经尝试了以下所有变体:
elem.find(..)
我能想到的,但我得到了其中之一
"None Type" or SyntaxError("cannot use absolute path on element")
我也尝试过 lxml getparent() 命令,正如在此处对类似查询的回应所建议的:Get parent element after using find method (xml.etree.ElementTree)但无济于事。
我是否必须在此文件中定义类才能完全访问 XPath 工具?
最佳答案
需要向上遍历一层
for elem in things.iterfind('thing/nodes/node[@id="1"]'):
# get parent of node - nodes
print elem.getparent()
# get grand parent of node - thing
print elem.getparent().getparent()
# now lets get the thing id
print elem.getparent().getparent().attrib.get('id')
关于python - 使用 python 从 XML 中的子项中查找父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617621/