Мул 4: модуль XML: как получить значения из сообщения XML, имеющего поля с пространствами имен, с помощью XPATH?

У меня есть образец файла xml, как показано ниже:

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>

Используя модуль Mule 4 XMl, я хочу получить значение «Цена».

Я пробую следующий код:

#[XmlModule::xpath('//soap:Envelope/soap:Body/m:GetPriceResponse/m:Price', payload, {})]

Однако это не работает. Кто-нибудь может помочь мне?


person Bibek Kr. Bazaz    schedule 12.05.2020    source источник
comment
Мне ужасно любопытно, почему бы просто не использовать для этого простой DataWeave. Это так же просто, как '# [output application / java --- payload.Envelope.Body.GetPriceResponse.Price]'   -  person Jorge Garcia    schedule 12.05.2020


Ответы (2)


Попробуйте следующее:

#[output application/java ---  XmlModule::xpath('//*:Price/text()', payload.^raw, {})[0]]
person Salim Khan    schedule 12.05.2020

Настоятельно рекомендуется использовать простой код DataWeave в Mule 4. Пожалуйста, найдите код ниже.

%dw 2.0
output application/java
---
payload.Envelope.Body.GetPriceResponse.Price
person Manish Yadav    schedule 12.05.2020
comment
Получение ошибки: попытка вывести непробельные символы вне основного дерева элементов (в прологе или эпилоге) при написании Xml в. вычисление выражения: payload.Envelope.Body.GetPriceResponse.Price. - person Bibek Kr. Bazaz; 16.05.2020
comment
Вам нужно использовать application / java в качестве вывода. Или, если вы используете application / XML, вам нужно добавить корневой элемент в DataWeave, например myRoot: выражение выше - person Manish Yadav; 17.05.2020