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>
我只想检索“name”元素、“op”和“value”元素。我正在使用下面的 xpath 表达式。但无法排除“field”元素下的“type”节点。
//filter//*[not(self::valueType)] and [not(following-sibling::type)]//text()
我的输出应该是:
empId
in
eID
desc
in
dbDesc
有什么帮助吗?
最佳答案
以下 XPath 表达式将从所有 name
、op
或 value
元素中选择文本:
(//name|//op|//value)/text()
在评论中根据 OP 请求更新:
I want name, op, value only from the filters element.
像您在评论中提到的那样调整 XPath:
(//filters//name|//filters//op|//filters//value)/text()
或者,更有效(假设在一般情况下收紧它不会丢失任何匹配项):
(/filters/filter/field/name|/filters/filter/op|/filters/filter/value)/text()
关于java - 排除 xpath 表达式中的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029712/