首页 > 解决方案 > 逻辑应用使用 XPath 从具有属性的节点获取值

问题描述

我正在一个从 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\"])')}"

它工作得很好,在这个例子中我得到了“你好”,但是我现在得到了这个 XML:

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

现在放在上面的表达式什么也没得到。我认为我需要调整表达式以执行类似“检索子属性等于 1 的节点值”之类的操作,但我无法使其工作,我已经看到了有关如何做到这一点的示例,但不知何故逻辑应用程序中使用的语法for XPath 与“标准”XPath 的使用方式有些不同。

我会很感激你的帮助,谢谢!

标签: xmlxpathazure-logic-apps

解决方案


用于选择具有N值为1和 alocal-name()的属性的元素的 XPathChild

/*[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"]

推荐阅读