首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Java集合参数的XpathExpression

带有Java集合参数的XpathExpression
EN

Stack Overflow用户
提问于 2013-03-20 20:30:52
回答 2查看 100关注 0票数 0

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

XML文件示例:

代码语言:javascript
复制
<?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)。

谢谢你的帮忙

EN

回答 2

Stack Overflow用户

发布于 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可能如下所示

代码语言:javascript
复制
//science:book[contains('|0|1|true|false|', concat('|', book:available, '|'))] |
//fiction:book[contains('|0|1|true|false|', concat('|', book:available, '|'))]

当然,建议将值字符串作为参数传递,这样您就可以获得例如

代码语言:javascript
复制
//science:book[contains($list, concat('|', book:available, '|'))] |
//fiction:book[contains($list, concat('|', book:available, '|'))]
票数 0
EN

Stack Overflow用户

发布于 2013-03-20 21:10:38

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

如果string1包含string2,则

返回true,否则返回false

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

代码语言:javascript
复制
//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"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15523615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档