下面是我的元素层次结构。如何检查(使用xpath) AttachedXml 元素出现在主要 消费者的 CreditReport 下
<Consumers xmlns="http://xml.mycompany.com/XMLSchema">
<Consumer subjectIdentifier="Primary">
<DataSources>
<Credit>
<CreditReport>
<AttachedXml><![CDATA[ blah blah]]>
答案 0 :(得分:78)
布尔函数转换它的 布尔值的参数如下:
当且仅当,数字为真 它既不是正面的,也不是负面的 零也不是NaN
当且仅当时,节点集为真 它是非空的
当且仅当,字符串为真 它的长度是非零的
除了以外的类型的对象 四种基本类型转换为a boolean的方式依赖于 那种类型
如果主要 消费者的 CreditReport 中有 AttachedXml ,则会返回{{1 }}
true()
答案 1 :(得分:6)
使用强>:
boolean(/*/*[@subjectIdentifier="Primary"]/*/*/*/*
[name()='AttachedXml'
and
namespace-uri()='http://xml.mycompany.com/XMLSchema'
]
)
答案 2 :(得分:5)
Saxon documentation虽然有点不清楚,但似乎暗示如果没有找到匹配的节点,则在评估XPath表达式时JAXP XPath API将返回false
。
This IBM article在没有节点匹配时提到null
的返回值。
您可能需要根据此API稍微使用返回类型,但基本思路是您只运行一个普通的XPath并检查结果是否为节点/ false
/ {{1 / etc。
null
答案 3 :(得分:4)
通常,当您尝试使用xpath选择节点时,如果节点不存在,则xpath-engine将返回null或等效节点。
xpath: "/Consumers/Consumer/DataSources/Credit/CreditReport/AttachedXml"
如果您使用xsl,请查看此问题以获得答案:
答案 4 :(得分:1)
看看我的例子
<tocheading language="EN">
<subj-group>
<subject>Editors Choice</subject>
<subject>creative common</subject>
</subj-group>
</tocheading>
现在如何检查creative common
是否存在
tocheading/subj-group/subject/text() = 'creative common'
希望这能帮到你
答案 5 :(得分:-1)
如果boolean()不可用(我正在使用的工具没有),实现它的一种方法是:
//SELECT[@id='xpto']/OPTION[not(not(@selected))]
在这种情况下,在/ OPTION中,其中一个选项是选定的选项。 “selected”没有值...它只是存在,而另一个OPTION没有“selected”。这实现了目标。