XPath:获取只有特定子元素的元素

4
我有一个文件系统,以以下格式在xml文档中表示:
<xml xmlns="namespace1" xmlns:ns2="namespace2">
  <entry>
    <id>123</id>
    <ns2:content name="type">directory</ns2:content>
    <ns2:content name="numErrors">3</ns2:content>
  </entry>
  ...
  <entry>
    <id>456</id>
    <ns2:content name="type">file</ns2:content>
    <ns2:content name="docState">success</ns2:content>
  </entry>
  ...
</xml>

我需要做的是,使用 Python 的 lxml 库,仅检索表示目录的 entry 对象。所有条目均包含一个 <ns2:content name="docState"> 对象,但我需要知道如何检索该对象的文本等于directoryentry对象列表。我可以采用几个不便的步骤来完成此操作,但我宁愿使用一次查询完成。以下是我会按步骤执行的方式:
#xml_parse.py

ns={'ns1':'namespace1','ns2':'namespace2'}
for node in tree.xpath("//ns1:entry",namespaces=ns):
    if node.find("ns2:content[@name='type']").text=="directory":
      #do stuff with node
      pass

有人能够解释如何在for语句内完成这个操作,而不是使用if语句吗?
谢谢。
1个回答

5

请使用以下XPath表达式:

//ns1:entry[ns2:content[@name='type' and .='directory']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接