Ich habe ein XML-Eingabe etwas auf dieser Linie:Wie kann ich mithilfe von XPath feststellen, ob ein Element vorhanden und nicht leer ist?
<Holding id="12">
<Policy>
<HoldingForm tc="1">Individual</HoldingForm>
<PolNumber>848433</PolNumber>
<LineOfBusiness tc="1">Life</LineOfBusiness>
<CarrierCode>67644</CarrierCode>
</Policy>
</Holding>
Meine Manipulation an der XML hängt davon ab, ob <PolNumber>
(sein ein optionales Element im Schema) einen Wert hat oder nicht. Ich bin mit Mule 3.3 xpath
Auswerter dies und meine XPath tun Ausdruck sieht folgendermaßen aus:
<expression-filter expression="#[xpath('//acord:Holding/acord:Policy/acord:PolNumber').text != empty]"/>
Das funktioniert gut, solange <PolNumber>
Element vorhanden ist oder <PolNumber/>
ist leeres Element. Wenn <PolNumber>
nicht vorhanden ist, löst der obige Ausdruck die Ausnahme aus.
Ich versuchte mit XPath boolean Funktion, aber es gibt true
für <PolNumber/>
zurück. Gibt es eine bessere Möglichkeit zu überprüfen, ob ein Element vorhanden und nicht leer ist?
EDIT:
Dies ist die Konfiguration von Namespace-Manager in meinem mule Config
<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>
Ich stimme zu, das ist besser als alle Textknotenkinder zu zählen, aber selbst diese Lösung ist nicht vollständig sicher. Dieser X - Pfad wird für ' 'zurückgeben. Ich weiß nicht, wie man eine neue Zeile im Kommentar zeigt, aber meine Absicht war, ein neues Zeilenzeichen zwischen '' und ' ' –
@Learner zu haben, das ist geradlinig: 'boolean (// acord: Holding/acord : Policy/acord: PolNumber/text() [normalize-space()] [1]) ' –
Danke Dimitre. Ich habe keine Belichtung mit XPath, all das ist sehr hilfreich für mich. –