xpath - 由具有条件的子项获取父ID

时间:2018-01-23 15:50:22

标签: python xml xpath contains

我的XML看起来像这样:

<doc>   
    <H Id="4732894">
      <M Ind="aa">
        <A Id="G">A</A>
        <A Id="S">M</A>
      </M>
    </H>
    <H Id="4326789">
      <M Ind="aa">
        <A Id="G">B</A>
        <A Id="S">F</A>
      </M>
      <M Ind="ab">
        <A Id="G">B</A>
        <A Id="S">M</A>
      </M>
      <M Ind="ac">
        <A Id="G">3</A>
        <A Id="S">F</A>
      </M>
      <M Ind="ad">
        <A Id="G">2</A>
        <A Id="S">F</A>
      </M>
    </H>
</doc>

我需要获取IdH元素M元素A元素Id=G元素B = C或文本中的Id=S,以及F = 4326789

因此,在此示例中,输出应该只是M,因为此H元素中的第一个"//H/M/A[@Id='G'][contains(text(),'B C']/../../@Id" 元素符合条件。

这是我尝试过的:

and

并且它已经引发了错误(因此我甚至没有尝试为@Id='S'添加{{1}}。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

尝试使用以下XPath获取所需的输出:

//H[M[A[@Id="G" and .="B"] and A[@Id="S" and .="F"]]]/@id

输出:

4326789

请注意,.="F"搜索文本内容等于 "F"的节点如果您需要包含的A节点 "F",您可以使用A[@Id="S" and contains(., "F")]