Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 - Fatal编程技术网

Xml XPath在两个节点上包含

Xml XPath在两个节点上包含,xml,xpath,Xml,Xpath,我有以下XML: <Root> <Level> <Name>John</Name> <Key>Lennon</Key> <Value> <Val>1</Val> </Value> </Level> <Level> <Name>Fred</Name> <Key

我有以下XML:

<Root>
 <Level>
    <Name>John</Name>
    <Key>Lennon</Key>
    <Value>
       <Val>1</Val>
    </Value>
 </Level>
 <Level>
    <Name>Fred</Name>
    <Key>Hi</Key>
    <Value>
       <Val>2</Val>
    </Value>
 </Level>
</Root>

约翰
列侬
1.
弗莱德
你好
2.
我需要一个XPath,它将使用关于Name键的“contains”

预期结果为“值/Val”

输入:Name-John,Key-Lennon


我想:1我想这会奏效的

/Root/Level[Name[1] = "John" and Key[1] = "Lennon"]/Value/Val[1]
使用

/*/*[Name='John'][Key='Lennon']/Value/Val
这将选择任何
Val
元素,该元素是任何
值的子元素
元素的子元素,该元素具有子
名称
,该子元素的字符串值为字符串“John”,子
的字符串值为字符串“Lennon:”,并且该子元素(该
值的父元素
)是XML文档顶部元素的子元素

如果只需要所选
Val
元素的字符串值,请使用:

string(/*/*[Name='John'][Key='Lennon']/Value/Val)
number(/*/*[Name='John'][Key='Lennon']/Value/Val)
除此之外,如果已知任何
Val
值是一个数字,请使用:

string(/*/*[Name='John'][Key='Lennon']/Value/Val)
number(/*/*[Name='John'][Key='Lennon']/Value/Val)

是的,除了你可以删除所有三个“[1]”谓词“因为我们对可能的输入不太了解。谢谢@MichaelKay。您知道,我通常在SQLServerMS中测试XPath,SQL有自己的XPath子集。你知道一些测试XPath的好方法吗,比如sqlfiddle.com for SQL或jsfiddle.com for javascript?@RomanPekar,一个好的(不仅仅因为我写了它:)工具是XPath可视化工具。它是完全免费和开源的,可以在以下位置获得: