【发布时间】:2015-09-08 13:44:18
【问题描述】:
我在 python 2.7 中使用 lxml 来解析一个 xml 文件。
文件如下所示:
...
<LM>sua</LM>
<LM>città</LM>
<LM>e</LM>
<LM>l'</LM>
<LM>alto</LM>
<LM>seggio</LM>:
</l><l>
<LM>oh</LM>
<LM>felice</LM>
<LM>colui</LM>
<LM>cu'</LM>
<LM>ivi</LM>
<LM>elegge</LM>!.
</l><l>
<LM> E</LM>
<LM>io</LM>
<LM>a</LM>
<LM>lui</LM>:
...
我正在遍历树以寻找 LM 节点。
for node in [z for z in tree.iterfind(".//LM")]:
print tree.getpath(node.getparent())
我得到每个节点的以下输出:
'/TEI.2/text/body/div1/l[480]'
所以,在这种情况下,这意味着当前节点 LM 在第 480 个节点 L 下。有没有办法得到这个 480,注意以下几点?
In [77]: int(tree.getpath(node.getparent()).split('/')[5][2:].replace(']',''))
Out[77]: 480
我的意思是通过 xpath 的优雅方式。
【问题讨论】:
-
.getpath只返回一个字符串,我认为 lxml 没有提供任何更精细的东西。如果您只关心最后一个节点,您可以这样做int(re.search("\[(.*?)]", tree.getelementpath(node.getparent())).groups()[0])(但这不一定“更好”)。