具有特定值的第二个节点的同级

时间:2017-11-08 13:20:54

标签: xml xpath

这是我正在使用的xml示例:

<data>
 <menu>
     <date>2017-11-08</date>
     <type>S</type>
     <name>onion soup</name>
 </menu>

 <menu>
     <date>2017-11-08</date>
     <type>L</type>
     <name>ham sandwich</name>
 </menu>

 <menu>
     <date>2017-11-09</date>
     <type>S</type>
     <name>pumpkin soup</name>  
 </menu>

 <menu>
     <date>2017-11-09</date>
     <type>L</type>
     <name>cheese sandwich</name>
 </menu>

 <menu>
      <date>2017-11-10</date>
      <type>S</type>
      <name>sweet potato soup</name>
 </menu>

 <menu>
      <date>2017-11-10</date>
      <type>L</type>
      <name>chicken sandwich</name>
 </menu>
</data>

xml每天都在动态变化,因此它始终以当前日期菜单开始。

我正在寻找一条始终显示“明天的汤”的系列,所以今天(8号)它假设给我的价值“南瓜汤”,第9届将展示“红薯汤”,第10届将会显示更改后将出现在xml中的新汤的值。

是否有一行会显示xml Feed中值为“S”的第二个“类型”的兄弟?

感谢您的帮助。

编辑:

我试过这个:

/data/menu/name[../type/text() = "S"] or /data/menu[type[text()='S']]/name

这是假设显示所有这些,但在我正在使用的软件中显示第一汤。但我不知道如何展示第二个。

EDIT2:

(/data/menu[type='S'])[2]/following-sibling::menu[1]/name

谢谢,但这实际上给了我明天的午餐名称,而不是汤名

EDIT3:

它实际上引导我找到一个解决方案,这可能不是最优雅的方式,但我认为应该这样做(我不知道我可以使用这样的双括号,所以谢谢!)

(/data/menu[type='S'])[2]/name

1 个答案:

答案 0 :(得分:0)

第二个“类型”之后的下一个菜单项的名称,其值为“S”

(/data/menu[type='S'])[2]/following-sibling::menu[1]/name