C# 获取某些属性的单个xpath表达式

C# 获取某些属性的单个xpath表达式,c#,xml,xpath,xmldocument,selectnodes,C#,Xml,Xpath,Xmldocument,Selectnodes,我有一个XML文档,其中包含一些节点,如 <node name="xxx" id="xxx"> 我是否可以使用单个XPath表达式获取其父级也具有ATAttribute@id=7的所有属性节点?否。您需要逐个定义要读取的属性 /node[@id=7]/@name 将获得名称 /node[@id=7]/@id 将获得id 等等。这将选择值为7的所有id属性节点: //*/@id[. = '7'] 使用: //@*[not(name()='id') and ../@id =

我有一个XML文档,其中包含一些节点,如

<node name="xxx" id="xxx">


我是否可以使用单个XPath表达式获取其父级也具有ATAttribute
@id=7
的所有属性节点?

否。您需要逐个定义要读取的属性

/node[@id=7]/@name 
将获得
名称

/node[@id=7]/@id
将获得
id


等等。

这将选择值为7的所有
id
属性节点:

//*/@id[. = '7']
使用

//@*[not(name()='id') and ../@id = 7]
这将选择其父级具有值为
7
id
属性的所有非id属性。这将接受
id='7'
id='7'

//@*[not(name()='id') and ../@id = '7']

这将选择其父级具有值为字符串
'7'
id
属性的所有非id属性。这将接受
id='7'
,但不接受
id='7'

选择id=7的所有name属性如何?@user496949-这将是:
/*[id='7']/@name
好问题,+1。到目前为止,唯一正确完整的解决方案请参见我的答案。:)实际上,在一个XPath表达式中很容易指定它——请参见我的答案。没有必要指定特定的属性名称。您编写了一个命令,需要逐个定义要读取的属性。这句话是错的。
//@*[not(name()='id') and ../@id = '7']