Ho un qualcosa di input XML su questa linea:Come dire usando XPath se un elemento è presente e non vuoto?
<Holding id="12">
<Policy>
<HoldingForm tc="1">Individual</HoldingForm>
<PolNumber>848433</PolNumber>
<LineOfBusiness tc="1">Life</LineOfBusiness>
<CarrierCode>67644</CarrierCode>
</Policy>
</Holding>
mio intervento su una XML dipende da se <PolNumber>
(suo un elemento facoltativo nello schema) ha un valore oppure no. Sto usando Mule 3.3 xpath
valutatore per fare questo e la mia espressione XPath sembra questo:
<expression-filter expression="#[xpath('//acord:Holding/acord:Policy/acord:PolNumber').text != empty]"/>
Questo funziona bene fino a quando <PolNumber>
elemento è presente o è <PolNumber/>
elemento vuoto. Ma se <PolNumber>
è assente, l'espressione sopra genera eccezione.
Ho provato a utilizzare la funzione XPath boolean ma restituisce true
per <PolNumber/>
. C'è un modo migliore per verificare se un elemento è presente e non vuoto?
EDIT:
Questa è la configurazione di responsabile dello spazio dei nomi nel mio config mulo
<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>
Sono d'accordo che è meglio di contare tutti i bambini con nodi di testo, ma anche questa soluzione non è a prova di tutto. questo xpath restituirà true per ' '. Non so come mostrare una nuova riga nel commento ma il mio intento era quello di avere un nuovo carattere di linea tra '' e ' ' –
@Learner, Questo è semplice: 'booleano (// acord: Holding/acord : Policy/acord: PolNumber/text() [normalize-space()] [1]) ' –
Grazie Dimitre. Non ho esposizione con xpath, tutto ciò è molto utile per me. –