У меня есть XML-код, который выглядит примерно так:
<?xml version = "1.0" encoding = "UTF-8"?>
<part xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" name = "payload">
<process xmlns = "http://xmlns.oracle.com/CommonBaswareHTTPWrapperProvider/CommonBasware_HTTPWrapperProviderBPEL">
<BaswareRequest xmlns = "http://xmlns.oracle.com/CommonBaswareHTTPWrapperProvider/BaswareRequest">
<BOName>yy</BOName>
<FileName>xx.xml</FileName>
<Action>SEND</Action>
<BOMessage>
<DocumentElement xmlns = "">
<Item>
<Text_1>123</Text_1>
<Text_2>123 CIO Office HOF</Text_2>
<Text_3>SWEDEN</Text_3>
<Text_4>3650</Text_4>
<Text_5>SWEDEN</Text_5>
<Text_6>True</Text_6>
<Text_EN />
<Active>True</Active>
<Company>001</Company>
</Item>
</DocumentElement>
</BOMessage>
</BaswareRequest>
</process>
</part>
Я хотел бы извлечь элемент BOMessage со всем его содержимым и использовать его позже в коде.
Внутри приложения логики я создал действие compose и написал внутри него следующий код:
xpath(xml(triggerBody()), '//*[local-name() = "BOMessage"]')
Результат этого действия возвращает странный закодированный код:
[
{
"$content-type": "application/xml;charset=utf-8",
"$content": "PEJPTWVzc2FnZSB4bWxucz0iaHR0cDovL3htbG5zLm9yYWNsZS5jb20vQ29tbW9uQmFzd2FyZUhUVFBXcmFwcGVyUHJvdmlkZXIvQmFzd2FyZVJlcXVlc3QiPg0KICAgICAgICAgICAgICAgIDxEb2N1bWVudEVsZW1lbnQgeG1sbnM9IiI+DQogICAgICAgICAgICAgICAgICAgIDxJdGVtPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfMT4xMjM8L1RleHRfMT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XzI+MTIzIENJTyBPZmZpY2UgSE9GPC9UZXh0XzI+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF8zPlNXRURFTjwvVGV4dF8zPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfND4zNjUwPC9UZXh0XzQ+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF81PlNXRURFTjwvVGV4dF81Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfNj5UcnVlPC9UZXh0XzY+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF9FTiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZT5UcnVlPC9BY3RpdmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8Q29tcGFueT4wMDE8L0NvbXBhbnk+DQogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4NCiAgICAgICAgICAgICAgICA8L0RvY3VtZW50RWxlbWVudD4NCiAgICAgICAgICAgIDwvQk9NZXNzYWdlPg= = "
}
]
Я пытался окружить функцию xpath функцией xml(), а также base64ToString() и decodeBase64(), но все они возвращают ошибки и, похоже, не работают.
Есть идеи, как решить эту проблему?
Без определения приложения логики я, возможно, не смогу дать точный ответ, но вы можете попробовать что-то вроде этого; xml(base64ToString(first(outputs('Compose'))?['$content'])). Замените Compose на название вашего действия, содержащего закодированный контент.


Это нормально. Когда вы попытаетесь получить доступ к первому элементу выходного массива xpath, вы будете довольны результатом. Попробуйте использовать следующее в действии «Написать», и все будет в порядке:
xpath(xml(triggerBody()), '//*[local-name() = "BOMessage"]')?[0]
Большое спасибо, этот маленький [0] действительно помогает. но что мне делать, если BOMessage был реальным массивом и я хочу, чтобы все элементы BOMessage были в этом массиве?
В этом случае каждый элемент массива будет представлять объект XML. В конце концов, вы будете иметь дело с ними индивидуально, например. путем итерации массива. Как правило, когда вы используете эти элементы в других действиях вашего рабочего процесса, механизм приложения логики понимает, что они из себя представляют, и легко с ними справляется. Вам не следует и не понадобится сосредотачиваться на $content-type и $content (как предлагается в комментариях).
Элемент
$contentсодержит элементBOMessageв виде строки в кодировке Base64. Вы можете убедиться в этом, используя такой онлайн-инструмент, как base64decode.