Как я могу использовать XPATH в муле для получения значений узлов XML?
#[xpath://soapenv:Envelope/soapenv:Body/out:notifications/out:Notification/out:sObject/urn:Summary]
Я использую вышеупомянутое XPATH
Код для извлечения значений узлов XML. Это не работает. Как можно исправить это. Но следующий код работает нормально.
<logger message="#[xpath('//*[local-name()=\'Description\']').text]"" level="INFO" doc:name="Logger"/>
Я хочу работать с первым форматом синтаксиса XPATH. Как я могу это сделать? Следующий код - мои фиктивные данные XML.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:out="http://soap.sforce.com/2005/09/outbound" xmlns:urn="urn:sobject.enterprise.soap.sforce.com">
<soapenv:Header/>
<soapenv:Body>
<out:notifications>
<out:OrganizationId>12345</out:OrganizationId>
<out:ActionId>999999</out:ActionId>
<out:SessionId>000000</out:SessionId>
<out:EnterpriseUrl>ggggggg</out:EnterpriseUrl>
<out:PartnerUrl>hhhhhhh</out:PartnerUrl>
<!--1 to 100 repetitions:-->
<out:Notification>
<out:Id>iiiiiiii</out:Id>
<out:sObject>
<!--Zero or more repetitions:-->
<urn:fieldsToNull>jjjjjjj</urn:fieldsToNull>
<urn:Id>789076</urn:Id>
<!--Optional:-->
<urn:FirstName>aaaa</urn:FirstName>
<!--Optional:-->
<urn:LastName>bbbbb</urn:LastName>
</out:sObject>
</out:Notification>
</out:notifications>
</soapenv:Body>
</soapenv:Envelope>
1 ответ
Решение
Прежде всего, в первом выражении вы ссылаетесь на элемент с именем Summary
который не существует в вашем XML.
Теперь, если вы хотите использовать пространства имен в своем выражении xpath, вам нужно будет объявить их в глобальном элементе namespace-manager:
<mulexml:namespace-manager includeConfigNamespaces="false">
<mulexml:namespace prefix="soapenv" uri="http://schemas.xmlsoap.org/soap/envelope/" />
<mulexml:namespace prefix="out" uri="http://soap.sforce.com/2005/09/outbound" />
<mulexml:namespace prefix="urn" uri="urn:sobject.enterprise.soap.sforce.com" />
</mulexml:namespace-manager>
Используя вышеупомянутое и заменяя Summary
с чем-то, что существует, работает:
<logger level="WARN" message="#[xpath://soapenv:Envelope/soapenv:Body/out:notifications/out:Notification/out:sObject/urn:Id]" />