我已經在這條線的輸入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