我已经在这条线的输入XML的东西:如何判断一个元素是否存在而非空,使用XPath?
<Holding id="12">
<Policy>
<HoldingForm tc="1">Individual</HoldingForm>
<PolNumber>848433</PolNumber>
<LineOfBusiness tc="1">Life</LineOfBusiness>
<CarrierCode>67644</CarrierCode>
</Policy>
</Holding>
我对这个XML操作取决于如果<PolNumber>
(其架构中的可选元素)的值或没有。我使用的骡子3.3 xpath
评估要做到这一点,我的XPath表达式如下这样:
<expression-filter expression="#[xpath('//acord:Holding/acord:Policy/acord:PolNumber').text != empty]"/>
这只要<PolNumber>
元素存在或<PolNumber/>
是空元素工作正常。但是,如果<PolNumber>
不存在,则上述表达式会引发异常。
我尝试使用XPath boolean函数,但它返回true
为<PolNumber/>
。有没有更好的方法来检查一个元素是否存在且非空?
编辑:
这是命名空间管理在我的骡子配置配置
<xm:namespace-manager includeConfigNamespaces="true">
<xm:namespace prefix="acord" uri="http://ACORD.org/Standards/Life/2" />
<xm:namespace prefix="soap" uri="http://schemas.xmlsoap.org/soap/encoding/" />
</xm:namespace-manager>
我同意这样更好比计算所有文本节点的孩子,但即使这种解决方案不是完整的证明。这个xpath将返回为' '。我不知道如何在评论中显示新行,但是我的意图是在''和' ' –
2013-04-10 16:39:04
@Learner之间有新的行字符,这是直接的:'boolean(// acord:Holding/acord :Policy/acord:PolNumber/text()[normalize-space()] [1])' – 2013-04-10 17:22:07
谢谢Dimitre。我没有用xpath进行曝光,所有这些都对我非常有帮助。 – 2013-04-10 18:07:23