排除xpath表达式中的子元素

时间:2014-09-25 02:50:24

标签: java xml xpath

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

任何帮助?

2 个答案:

答案 0 :(得分:3)

以下XPath表达式将从所有nameopvalue元素中选择文字:

(//name|//op|//value)/text()

在评论中更新每个OP请求:

  

我只需要来自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()