我想选择一个没有祖先的节点。
例如,
<root>
<e>
<head>
<id>3</id>
<word>abandon</word>
</head>
<body>
<head>
<word>accept</word>
</head>
</body>
</e>
</root>
我想选择第一个元素,而不是第二个元素。
我试过了:
import xml.etree.ElementTree as ET
root = ET.fromstring(fin).getroot()
word = root.find('.//word[not(ancestor::body)]')
但它不起作用。
答案 0 :(得分:2)
import lxml.etree as ET
fin = '''\
<root>
<e>
<head>
<id>3</id>
<word>abandon</word>
</head>
<body>
<head>
<word>accept</word>
</head>
</body>
</e>
</root>'''
root = ET.fromstring(fin)
word = root.xpath('.//word[not(ancestor::body)]')
print(ET.tostring(word[0]))
# <word>abandon</word>