HI有以下xml。
<filters>
<filter>
<field>
<name>empId</name>
<type>int</type>
</field>
<op>in</op>
<value>eID</value>
<valueType>PERI</valueType>
</filter>
<filter>
<field>
<name>desc</name>
<type>string</type>
</field>
<op>in</op>
<value>dbDesc</value>
<valueType>PERI</valueType>
</filter>
</filters>
我只想检索&#34; name&#34;元素,&#34; op&#34;和&#34;价值&#34;元素。我使用下面的xpath expresssion。但无法排除&#34;类型&#34;在&#34; field&#34;之下的节点元件。
//filter//*[not(self::valueType)] and [not(following-sibling::type)]//text()
我的输出应该是:
empId
in
eID
desc
in
dbDesc
任何帮助?
答案 0 :(得分:3)
以下XPath表达式将从所有name
,op
或value
元素中选择文字:
(//name|//op|//value)/text()
我只需要来自filters元素的名称,op,value。
调整XPath,与您在评论中提到的类似:
(//filters//name|//filters//op|//filters//value)/text()
或者,更有效率(提供收紧不会在一般情况下失去任何匹配):
(/filters/filter/field/name|/filters/filter/op|/filters/filter/value)/text()
答案 1 :(得分:2)
这应该有效:
//filter//*[self::name or self::op or self::value]/text()