(python中的xpath)我想选择一个没有“body”作为其祖先的节点

时间:2013-01-31 12:41:27

标签: python xml lxml elementtree

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

例如,

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

但它不起作用。

1 个答案:

答案 0 :(得分:2)

您可以XPath 1.0使用lxml

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>