检查节点集是否相等XPath 1.0

时间:2016-04-26 17:26:13

标签: xml xpath compare equals nodelist

我想使用XPath选择一些以相同单词结尾的节点,并检查它们是否彼此相等。所以,例如,

<a>
    <b-token>123456789</b-token>
    ...
    <c>
        <d>
            <d-token>123456789</d-token>
            ...
        </d>
        <e>
            <e-token>123456789</e-token>
            ...
        </e>
        <f>
            <f-token>123456789</f-token>
            ...
        </f>
    <c>
</a>

所以,我想搜索以&#34; -token&#34;结尾的所有节点。并确保它们是等效的。这可以在XPath 1.0中完成吗? 2.0? XSD?

这是一个示例XPath,虽然我会工作,但它没有

String xpathExpression = "/descendant-or-self::node()/*[substring(name(), string-length(name() ) - (string-length('token')-1) ) = 'token'] = /descendant-or-self::node()/*[substring(name(), string-length(name() ) - (string-length('token')-1) ) = 'token']";

当我在&#39; =&#39;之后输入特定值时,它会起作用像这样:

String xpathExpression = "/descendant-or-self::node()/*[substring(name(), string-length(name() ) - (string-length('token')-1) ) = 'token'] = '123456789'";

如果重要的话,我正在使用Java 7.

由于

1 个答案:

答案 0 :(得分:1)

如果使用not(//*[substring(local-name(), string-length(local-name()) - 5) = '-token'] != //*[substring(local-name(), string-length(local-name()) - 5) = '-token']),那么只要所有元素具有相同的字符串值,该比较就为真,如果至少有一个元素的字符串内容不相等则为false。