【发布时间】:2015-10-15 13:04:35
【问题描述】:
我是新手,请耐心等待。
使用 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>
一个“节点”包含一个体素的坐标,一个“事物”是一组体素。 “cmets”用于突出显示感兴趣的节点。
我可以使用 find 命令查找单个“节点 ID”的属性,例如:
for elem in things.iterfind('thing/nodes/node[@id="221"]'):
x = int(elem.get('x'))
我希望能够确定任何“节点 id”所属的“事物 id”(例如节点 3 在事物 N 中)。我知道我可以使用 for 循环来执行此操作,遍历事物然后遍历节点,但我认为应该有一些方法可以更简单地通过从子节点中找到父节点来完成此操作。
我已经尝试了以下所有变体:
elem.find(..)
我能想到的,但我得到了任何一个
“无类型”或 SyntaxError("不能在元素上使用绝对路径")
我也尝试了 lxml getparent() 命令,正如在此处响应类似查询时所建议的那样:Get parent element after using find method (xml.etree.ElementTree) 但无济于事。
我是否必须在此文件中定义类才能完全访问 XPath 工具?
【问题讨论】:
标签: python xml xpath lxml elementtree