Приложение Azure Logic - xpath для xml с префиксом пространства имен - PullRequest
0 голосов
/ 01 мая 2018

В моем приложении логики я использую функцию xpath (), чтобы получить значение. Я пробовал разные xpaths но получаю ошибку

'Недопустимые параметры функции языка шаблонов' xpath ': параметр' xpath 'должен быть поддерживаемым, правильно сформированным выражением XPath. Пожалуйста, смотрите https://aka.ms/logicexpressions#xpath для подробностей использования. '.

у меня есть следующий xml:

enter image description here

Я пытался:

@xpath(xml(<YourMessage>), '/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]')
@xpath(xml(<YourMessage>), 'string(/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"])')

но получаю ту же ошибку enter image description here

Ответы [ 4 ]

0 голосов
/ 05 мая 2018

Я сделал то, что предложил Джон-305.

json(<Output>)['soap:Envelope']['soap:Body']
0 голосов
/ 01 мая 2018

Возможно, вам лучше конвертировать в JSON и работать с данными в этом формате. По крайней мере, таким образом вы можете избавиться от всех глупых сложностей с пространством имен.

LogicApps внутренне ориентирован на JSON, поэтому в любом случае это будет немного более «правильным».

Примеры можно найти по адресу: JSONPath - XPath для JSON

И оценщик: JSONPath Online Evaluator

0 голосов
/ 03 мая 2018

Если вам нужно значение одного из внутренних узлов, вы можете попробовать:

@xpath(<YourMessage>, 'string(/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[name()=\"SearchByABNv201408Response\"]/*[name()=\"ABRPayloadSearchResults\"]/*[name()=\"Request\"]/*[name()=\"identifierSearchRequest\"]/*[name()=\"authenticationGUID\"])')

Надеюсь, это направит вас в правильном направлении

0 голосов
/ 01 мая 2018

Вы можете включить пространство имен в свой xpath, используя это выражение:

@xpath(YOURBODY, '/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]')
...