java - 排除 xpath 表达式中的子元素

标签 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>

我只想检索“name”元素、“op”和“value”元素。我正在使用下面的 xpath 表达式。但无法排除“field”元素下的“type”节点。

//filter//*[not(self::valueType)] and [not(following-sibling::type)]//text()

我的输出应该是:

empId
in
eID
desc
in
dbDesc

有什么帮助吗?

最佳答案

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

(//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/

相关文章:

xml - XPath 2.0 - 1.0 等效?

xml - 如何使用 Augeas 更新现有的或创建新的 XML 节点

java - 在正在运行的 JVM 的一个非常有限的部分执行 Java 字节码

java - 设计模式 - 使用通用对象来更新 GUI

java - 在没有 WebMvcConfigurationSupport 的情况下注册 Spring HandlerInterceptor

c# - 在 Xml-Deserialization 中获取节点的所有子元素的名称

python - 碎片 : Select only <p> elements with text content with xpath

java - 如何在 selenium-java 中使用 xpath 获取表中禁用属性的大小

c# - 哪个网页元素标签更适合使用 Webdrive 定位和获取值(value)

java - "(a << 24 | b << 16 | c << 8 | d)"是什么意思?