在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)。
谢谢你的帮忙
发布于 2013-03-20 21:06:56
我不能用具体的XPath代码来帮助你,但是在Java1.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",则XPath可能如下所示
//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-20 21:10:38
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"]https://stackoverflow.com/questions/15523615
复制相似问题