在java {“0”,“1”,“true”,“false”}中有这样的集合我想选择所有属于'available'属于我的集合的书。
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)。
感谢您的帮助
答案 0 :(得分:0)
我无法帮助您使用具体的Java代码,但要检查一个元素是否包含XPath 1.0中的列表或值集合之一,您通常会从列表或集合中创建一个字符串,其中的值不包含在值中例如您的收藏集{"0","1","true","false"}
变为|0|1|true|false|
(我在其中选择了条形字符|
作为分隔符)然后您进行比较,例如//book[contains($list, concat('|', available, '|'))]
。
显然你的输入更复杂,因为它使用命名空间,并且那种方式(至少?)你正在寻找两个不同的元素,而available
元素也在命名空间中。
因此假设xmlns:science="http://univNaSpResolver/sciencebook"
,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, '|'))]
答案 1 :(得分: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"]