1

我想选择一个没有作为其祖先的节点。

例如,

<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)]')

但它不起作用。

4

1 回答 1

2

您可以将XPath 1.0lxml一起使用:

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>
于 2013-01-31T12:46:02.400 回答