Приложение логики получает значение из узла с атрибутами, используя XPath - PullRequest
0 голосов
/ 17 февраля 2019

Я работаю в приложении логики, которое извлекает значения из XML.Первоначально я работал с этой структурой XML:

<Parent>
    <Child1>Hello</Child1>
    <Child2>World</Child2>
</Parent>

И я смог получить значения, используя это выражение XPath (это внутри действия For_Each):

"@{xpath(xml(items('For_each_node')), 'string(/*[local-name()=\"Parent\"]/*[local-name()=\"Child1\"])')}"

Это прекрасно работает, и я получаю «Hello» в этом примере, однако теперь мне дали этот XML:

<Parent>
  <Child N="1">Hello</Child>
  <Child N="2">World</Child>
</Parent>

И теперь выражение, помещенное выше, ничего не получает.Я думаю, что мне нужно настроить выражение, чтобы сделать что-то вроде «получить значение узла, где дочерний атрибут равен 1», но я не могу заставить его работать, я видел примеры, как это сделать, но каким-то образом синтаксис, используемый в приложениях логикиXPath немного отличается от того, как используется «стандартный» XPath.

Буду признателен за помощь, спасибо!

1 Ответ

0 голосов
/ 17 февраля 2019

XPath для выбора элементов, имеющих атрибут N со значением 1 и local-name() из Child

/*[local-name() = "Parent"]/*[local-name() = "Child" and @N = "1"]

Применяется к коду, который вы изначально предоставили:

"@{xpath(xml(items('For_each_node')), 'string(/*[local-name()=\"Parent\"]/*[local-name()=\"Child\" and @N=\"1\"])')}"

Если ваш XML не связан с пространством имен, вы можете еще больше упростить ситуацию.Вместо общего соответствия для любого элемента с * и последующего использования предиката для проверки local-name(), просто используйте:

/parent/child[@N="1"]
...