XPath:如何选择当前节点的子节点

mrh*_*h53 3 xml xpath

我正在练习 XPath 并且很难理解一些概念。

从下面代码段我想要选择的w1identw1slavetype所述的元件w1slave,其元素节点w1slavename具有值livingroom

 <w1slave create="2017-01-05 12:39:41">
   <w1ident>28-0000000FBAA6</w1ident>
   <w1identprefix>28</w1identprefix>
   <w1slavetype>THERM_DS18B20</w1slavetype>
   <w1slavename>familyroom</w1slavename>
 </w1slave>
 <w1slave create="2017-01-05 12:39:45">
   <w1ident>28-000005e2fdc3</w1ident>
   <w1identprefix>28</w1identprefix>
   <w1slavetype>THERM_DS18B20</w1slavetype>
   <w1slavename>livingroom</w1slavename>
 </w1slave>
Run Code Online (Sandbox Code Playgroud)

XPath 表达式//w1slave[w1slavename='livingroom']/w1ident有效,替换w1identw1slavetype.

但是一旦我用 选择了父节点//w1slave[w1slavename='livingroom'],是否有一种紧凑的方式来请求特定的子节点而不必重复初始选择?

喜欢

//w1slave[w1slavename='livingroom']/w1ident |   

//w1slave[w1slavename='livingroom']/w1slavetype 
Run Code Online (Sandbox Code Playgroud)

有效,但感觉很麻烦。

Dan*_*ley 5

您可以self::在谓词中使用轴:

//w1slave[w1slavename='livingroom']/*[self::w1ident or self::w1slavetype]
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用的是 XPath 2.0,您可以放弃谓词而只|在括号中使用联合 ( ):

//w1slave[w1slavename='livingroom']/(w1ident|w1slavetype)
Run Code Online (Sandbox Code Playgroud)