Как я могу использовать XPATH в муле для получения значений узлов XML?

#[xpath://soapenv:Envelope/soapenv:Body/out:notifications/out:Notification/out:sObject/urn:Summary] 

Я использую вышеупомянутое XPATH Код для извлечения значений узлов XML. Это не работает. Как можно исправить это. Но следующий код работает нормально.

<logger message="#[xpath('//*[local-name()=\'Description\']').text]&quot;" 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]" />
Другие вопросы по тегам