Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 逻辑应用程序使用XPath从具有属性的节点获取值_Xml_Xpath_Azure Logic Apps - Fatal编程技术网

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

Xml 逻辑应用程序使用XPath从具有属性的节点获取值,xml,xpath,azure-logic-apps,Xml,Xpath,Azure Logic Apps,我在一个从XML检索值的逻辑应用程序中工作。我最初使用的是这种XML结构: <Parent> <Child1>Hello</Child1> <Child2>World</Child2> </Parent> 它工作得很好,在本例中我得到了“Hello”,但现在我得到了以下XML: <Parent> <Child N="1">Hello</Child> <Chi

我在一个从XML检索值的逻辑应用程序中工作。我最初使用的是这种XML结构:

<Parent>
    <Child1>Hello</Child1>
    <Child2>World</Child2>
</Parent>
它工作得很好,在本例中我得到了“Hello”,但现在我得到了以下XML:

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

你好
世界
现在,放在上面的表达式不检索任何内容。我认为我需要调整表达式以执行类似“检索节点值,其中子属性等于1”的操作,但我无法使其正常工作,我已经看到了如何执行该操作的示例,但XPath的逻辑应用程序中使用的语法与“标准”XPath的使用方式有所不同


谢谢你的帮助,谢谢

选择具有
N
属性且值为
1
Child的
local-name()
的元素的XPath

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

这很有效,谢谢!关于建议的简短版本,只有一个问题;这对我来说就是行不通。我这样尝试:“@{xpath(xml(items('For_each_node')),”string(/parent/child[@N=“1”))}”但是它抛出了一个关于无效XPath表达式的错误。我是否遗漏了什么?谢谢!看起来您在XPath中转义了双引号,是否转义了属性值周围的双引号?由于表达式在引号内,可能需要使用或使用单引号。我确实尝试过这个(我的道歉):“@{XPath(xml)(项目('For_each_node'),'string(/parent/child[@N=\'1\”)},这就是您所指的吗?谢谢!是的,这就是我所指的。这是一个有效的XPath表达式。我不熟悉Azure逻辑。我所看到的使用XPath的人的例子碰巧在元素上与
*
匹配,然后使用谓词匹配
local-name()
namespace-uri()
,所以可能有一些原因。这很不幸,因为这是一个可读性较差的约定。我想,现在,请坚持使用有效的方法。不过,可能会有一个单独的stackoverflow问题,询问如何在Azure Logic应用程序中使用更简单的XPath形式。
/parent/child[@N="1"]