0

在 java {"0","1","true","false"} 中有这样的集合我想选择我的集合中属性“可用”的所有书籍。

XML 文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<books:booklist
    xmlns:books="http://univNaSpResolver/booklist"
    xmlns="http://univNaSpResolver/book"
    xmlns:fiction="http://univNaSpResolver/fictionbook">
    <science:book xmlns:science="http://univNaSpResolver/sciencebook">
        <title>Learning XPath</title>
        <author>Michael Schmidt</author>
        <available>1</available>
    </science:book>
    <fiction:book>
        <title>Faust I</title>
        <author>Johann Wolfgang von Goethe</author>
        <available>maybe</available>
    </fiction:book>
    <fiction:book>
        <title>Faust II</title>
        <author>Johann Wolfgang von Goethe</author>
        <available>true</available>
    </fiction:book>
</books:booklist>

似乎使用 contains 函数可以做到这一点,但我不知道如何在 XPath 中使用列表作为参数(对于 java)。

谢谢你的帮助

4

2 回答 2

0

我无法为您提供具体的 Java 代码,但要检查一个元素是否包含 XPath 1.0 中的值列表或集合之一,您通常会从列表或集合中创建一个字符串,其中分隔符不包含在值中,例如您的集合{"0","1","true","false"}变成|0|1|true|false|(我选择了条形字符|作为分隔符)然后你比较例如//book[contains($list, concat('|', available, '|'))].

显然,您的输入更复杂,因为它使用名称空间,并且这种方式(至少?)您正在寻找两个不同的元素,并且该available元素也在名称空间中。

因此,假设命名空间映射为 xmlns:science="http://univNaSpResolver/sciencebook",XPath 可能看起来像xmlns:fiction="http://univNaSpResolver/fictionbook"xmlns:book="http://univNaSpResolver/book"

//science:book[contains('|0|1|true|false|', concat('|', book:available, '|'))] |
//fiction:book[contains('|0|1|true|false|', concat('|', book:available, '|'))]

当然,最好将值的字符串作为参数传递,这样你就可以得到例如

//science:book[contains($list, concat('|', book:available, '|'))] |
//fiction:book[contains($list, concat('|', book:available, '|'))]
于 2013-03-20T13:06:56.033 回答
0

XPath 中可用的contains(string1,string2)函数只是一个字符串比较

如果 string1 包含 string2,则返回 true,否则返回 false

您始终可以使用OR运算符连接谓词:

//science:book[available="true" or available="false" or available="1" or available="0"] |
//fiction:book[available="true" or available="false" or available="1" or available="0"]
于 2013-03-20T13:10:38.070 回答