Функция xpath приложения логики возвращает результат в закодированном формате

У меня есть 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(), но все они возвращают ошибки и, похоже, не работают.

Есть идеи, как решить эту проблему?

Элемент $content содержит элемент BOMessage в виде строки в кодировке Base64. Вы можете убедиться в этом, используя такой онлайн-инструмент, как base64decode.

Shakya Dissanayake 25.02.2024 19:39

Без определения приложения логики я, возможно, не смогу дать точный ответ, но вы можете попробовать что-то вроде этого; xml(base64ToString(first(outputs('Compose'))?['$content'])). Замените Compose на название вашего действия, содержащего закодированный контент.

Shakya Dissanayake 25.02.2024 19:50
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это нормально. Когда вы попытаетесь получить доступ к первому элементу выходного массива xpath, вы будете довольны результатом. Попробуйте использовать следующее в действии «Написать», и все будет в порядке:

xpath(xml(triggerBody()), '//*[local-name() = "BOMessage"]')?[0]

Большое спасибо, этот маленький [0] действительно помогает. но что мне делать, если BOMessage был реальным массивом и я хочу, чтобы все элементы BOMessage были в этом массиве?

ibda 25.02.2024 22:25

В этом случае каждый элемент массива будет представлять объект XML. В конце концов, вы будете иметь дело с ними индивидуально, например. путем итерации массива. Как правило, когда вы используете эти элементы в других действиях вашего рабочего процесса, механизм приложения логики понимает, что они из себя представляют, и легко с ними справляется. Вам не следует и не понадобится сосредотачиваться на $content-type и $content (как предлагается в комментариях).

10p 25.02.2024 22:36

Другие вопросы по теме