Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/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
XPath:查找属性节点(并且只有一个)_Xpath - Fatal编程技术网

XPath:查找属性节点(并且只有一个)

XPath:查找属性节点(并且只有一个),xpath,Xpath,XPath是什么,可以只找到一个具有特定属性的节点(无论哪个节点)(实际上我感兴趣的是属性,而不是节点)。例如,在我的XML中,我有几个具有lang属性的标记。我知道它们都有相同的价值。我只想得到其中任何一个 现在,我这样做:/*[1][@lang]/@lang,但它似乎无法正常工作,原因不明 我的尝试让我实现了从所有@lang值('en-en…')的串联到什么都没有的事情,有时在我想要的东西之间,但不是在所有XML上 编辑: 实际上,/@lang[1]无法工作,因为函数position()是

XPath是什么,可以只找到一个具有特定属性的节点(无论哪个节点)(实际上我感兴趣的是属性,而不是节点)。例如,在我的XML中,我有几个具有lang属性的标记。我知道它们都有相同的价值。我只想得到其中任何一个

现在,我这样做:
/*[1][@lang]/@lang
,但它似乎无法正常工作,原因不明

我的尝试让我实现了从所有@lang值('en-en…')的串联到什么都没有的事情,有时在我想要的东西之间,但不是在所有XML上


编辑:

实际上,
/@lang[1]
无法工作,因为函数
position()
是在对
lang
属性进行测试之前调用的。所以它总是使用XML中找到的第一个元素。它在当时工作得最好,因为很多时候,lang属性位于根元素上。

您尝试过这个吗

//@lang[1]

您可以看到一个示例。

以下XPath似乎可以满足您的需要:

//*[@lang][1]/attribute::lang

经过更多的处理,以下是一个有效的解决方案:

 (//@lang)[1]

需要用括号将
[1]
与属性名分开,否则
position()
函数将应用于属性的父元素中(这是无用的,因为标记中只能有一个特定名称的属性:这就是为什么
/@lang[2]
始终不选择任何内容)

不,我没有!乍一看好多了,我马上做个彻底的测试!谢谢。实际上它不能正常工作,它选择了它们的父元素中的所有第一个lang元素。@subtenant:不知道关于您的输入的任何其他信息,我认为这应该可以工作(这解释了为什么您的尝试不能工作)@阿泰姆·巴格的解决方案要优雅得多。@Tomalak:不幸的是,它没有,我也无法解释为什么。