Xpath选择两个不同节点而没有特定节点

时间:2016-10-26 22:30:25

标签: xml xpath

Hello Stackoverflow社区!

我有以下XML结构:

  <fruit>
    <id>1</id>
    <name>Apple</name>
    <species>Tree</species>
    <features>
      <from>Reineta</from>
      <into>Golden</into>
    </features>
  </fruit>

  <fruit>
    <id>2</id>
    <name>Orange</name>
    <species>Tree</species>
    <features>
      <from>Citric</from>
      <into>Mediterranean</into>
    </features>
  </fruit>

  <fruit>
    <id>3</id>
    <name>Peach</name>
    <species>Tree</species>
    <features>
      <from>Golden</from>
    </features>
  </fruit>

如何获取那些<name><features>个水果节点其中包含功能/ 节点?

我试过了:

//fruit/features[from][not(into)]

我只能获得<features>,但如何在同一查询中获得<name>

非常感谢。

1 个答案:

答案 0 :(得分:2)

如果这是XPath 1.0,那么最好的办法是使用union运算符(|)来组合返回features的XPath和返回name的另一个XPath的结果:

//fruit/features[from and not(into)] | //fruit[features[from and not(into)]]/name

在更高版本的XPath中,您可以使用FLWOR表达式执行以下操作(假设fruit元素一次只能包含一个features元素):

for $fruit in //fruit[features[from and not(into)]]
return ($fruit/name,$fruit/features)

<强> demo