逻辑应用程序使用XPath从具有属性的节点获取值

时间:2019-02-17 15:29:29

标签: xml xpath azure-logic-apps

我正在使用从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的情况下检索节点值”的操作,但是我无法使其工作,我已经看到了有关如何执行此操作的示例,但是以某种方式在Logic应用程序中使用了语法XPath与“标准” XPath的使用方式有所不同。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

用于选择元素的XPath,该元素具有N属性的值1local-name()的{​​{1}}

Child

应用于您最初提供的代码:

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

如果XML没有绑定到名称空间,则可以进一步简化。代替使用"@{xpath(xml(items('For_each_node')), 'string(/*[local-name()=\"Parent\"]/*[local-name()=\"Child\" and @N=\"1\"])')}" 在任何元素上进行一般匹配,然后使用谓词测试*,而只需使用:

local-name()