如何在XPath中选择布尔值节点?

Joh*_*ohn 5 xpath xsd

我有一个XML文档和关联的模式,它将几个属性定义为具有该xs:boolean类型.对于词法值xs:booleantrue,false,1,和0,因此它似乎正确地选择与特定的布尔值属性,我不得不写类似:

@attribute='true' or @attribute='1'
Run Code Online (Sandbox Code Playgroud)

要么

@attribute='false' or @attribute='0'
Run Code Online (Sandbox Code Playgroud)

这看起来很冗长.

你可能期望某些东西boolean(@attribute)可以工作,但是这个boolean函数有不同的语义.

有没有更好的办法?这是架构感知处理器可以帮助的东西吗?

Joh*_*ohn 6

除了Phil和Tomalak提出的解决方案之外,我发现XPath 2.0提供了一些替代方案:

@attribute=('true','1')
string(@attribute) cast as xs:boolean
Run Code Online (Sandbox Code Playgroud)

最后,XPath 2.0确实提供了模式感知处理,这意味着如果所有内容都一致,您应该能够编写:

data(@attribute)
Run Code Online (Sandbox Code Playgroud)

但架构感知处理器似乎很难得到.最受欢迎的似乎是撒克逊人的非自由商业变种,花费300英镑.所以现在我正在使用@attribute=('true','1').


小智 6

尝试以下 XPath 表达式:

[@attribute=true()]
Run Code Online (Sandbox Code Playgroud)