Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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
C# 使用";有什么区别/&引用;及;“家长”;在XPath查询中?_C#_Asp.net_Xpath - Fatal编程技术网

C# 使用";有什么区别/&引用;及;“家长”;在XPath查询中?

C# 使用";有什么区别/&引用;及;“家长”;在XPath查询中?,c#,asp.net,xpath,C#,Asp.net,Xpath,在XPath查询中使用“./”和“parent”来获取父节点有什么区别。我原以为它们是同义词 给定以下两个XPath查询,这两个查询之间真的有什么区别吗 //Node/id[@type='image']/id[@attr1='myVal']/../../* //Node/id[@type='image']/id[@attr1='myVal']/parent::*/parent::* 我正在开发一个C#/ASP.net应用程序,并使用第一个XPath查询返回Node元素之前的第一个同级。我要寻

在XPath查询中使用“./”和“parent”来获取父节点有什么区别。我原以为它们是同义词

给定以下两个XPath查询,这两个查询之间真的有什么区别吗

//Node/id[@type='image']/id[@attr1='myVal']/../../*

//Node/id[@type='image']/id[@attr1='myVal']/parent::*/parent::*
我正在开发一个C#/ASP.net应用程序,并使用第一个XPath查询返回Node元素之前的第一个同级。我要寻找的是节点元素本身及其所有子元素。第二个XPath查询将给出我的预期结果


我想知道为什么这里有区别。

快速回答;是的,../和parent::::*是等效的,但由于XPath表达式不同,因此得到的结果不同

更长的回答

表达式parent::node()和。。是等效的,后者是前者的缩写形式

您将从父项::*中获得类似的行为,因为XML形成一个树,所以任何子项最多只能有一个父项

您将得到不同结果的原因是它们是不同的查询。第一个在末尾有一个额外的*(../../*),它可能返回节点的子项序列

第二个具体获取上下文节点的父节点(缩写形式为../),它是您感兴趣的节点元素

例如:

对于文档

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Node>
        <id type="image">
            <id attr1="myVal"> </id>
        </id>
    </Node>
</root>

返回节点id[@type='image']

而查询

//Node/id[@type='image']/id[@attr1='myVal']/../../* 
//Node/id[@type='image']/id[@attr1='myVal']/../..


返回节点。

您没有得到相同的结果集,因为*您的表达式彼此不等价。*

考虑:

1。目标节点的孙子节点

//节点/id[@type='image']/id[@attr1='myVal']

2。目标节点的子节点(孙子节点的父节点)(等效表达式)

//节点/id[@type='image']/id[@attr1='myVal']/

//节点/id[@type='image']/id[@attr1='myVal']/parent::*

3。目标节点(孙辈的祖辈)(等效表达式)

//节点/id[@type='image']/id[@attr1='myVal']/../


//节点/id[@type='image']/id[@attr1='myVal']/parent::*/parent::*哈?你的快速回答不是说:是的,它们是一样的,但是不,它们是不同的吗?这真是棒极了。我的大部分困惑似乎来自于在XPath查询的末尾使用“*”以及它到底返回了什么。XPath测试页面链接非常适合测试一些搜索和查看结果。帮了很多忙。
//Node/id[@type='image']/id[@attr1='myVal']/../..
//Node/id[@type='image']/id[@attr1='myVal']/parent::*/parent::*