Mam coś XML wejście na tej linii:Jak powiedzieć, używając XPath, jeśli element jest obecny i nie jest pusty?
<Holding id="12">
<Policy>
<HoldingForm tc="1">Individual</HoldingForm>
<PolNumber>848433</PolNumber>
<LineOfBusiness tc="1">Life</LineOfBusiness>
<CarrierCode>67644</CarrierCode>
</Policy>
</Holding>
Moja manipulacja na tym XML zależy czy <PolNumber>
(jego opcjonalnym elementem schematu) ma wartość, czy nie. Używam Mule 3.3 xpath
oceniającego to zrobić i mój wyrażenie XPath wygląda następująco:
<expression-filter expression="#[xpath('//acord:Holding/acord:Policy/acord:PolNumber').text != empty]"/>
Działa to dobrze, tak długo, jak <PolNumber>
elementem jest obecna lub <PolNumber/>
jest pusty element. Ale jeśli nie ma wartości <PolNumber>
, powyższe wyrażenie zgłasza wyjątek.
Próbowałem użyć funkcji XPath boolean, ale zwraca true
dla <PolNumber/>
. Czy istnieje lepszy sposób sprawdzenia, czy element jest obecny i czy nie jest pusty?
EDIT:
Jest to konfiguracja menedżera przestrzeni nazw w moim 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>
Zgadzam się, że to jest lepsze niż zliczanie wszystkich dzieci z węzłem tekstowym, ale nawet to rozwiązanie nie jest pełne. ta ścieżka będzie zwracana true dla ' '. Nie wiem, jak wyświetlić komentarz w komentarzu, ale moim zamiarem było uzyskanie nowej linii między '' i ' ' –
@Learner, To jest proste: 'boolean (// acord: Holding/acord : Policy/acord: PolNumber/text() [normalize-space()] [1]) ' –
Dzięki Dimitre. Nie mam ekspozycji z xpath, wszystko to jest dla mnie bardzo pomocne. –