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

时间:2009-07-09 07:21:27

标签: xpath

什么是XPath只能找到一个具有特定属性的节点(无论哪个)(实际上我对属性感兴趣,而不是节点)。例如,在我的XML中,我有几个具有lang属性的标签。我知道所有这些都必须具有相同的价值。我只想得到他们中的任何一个。

现在,我执行此操作://*[1][@lang]/@lang,但由于未知原因,似乎无法正常工作。

我的尝试让我想到的事情包括将所有@lang值('en en en en ...')连接到任何东西,有时在我想要的内容之间,而不是在所有XML上。


编辑:

实际上//@lang[1]无效,因为在position()属性存在的测试之前调用了函数lang。所以它始终需要在XML中找到第一个元素。它在当时效果最好,因为很多次,lang属性都是根元素。

3 个答案:

答案 0 :(得分:7)

经过多次处理后,这是一个有效的解决方案:

 (//@lang)[1]

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

答案 1 :(得分:2)

你试过这个吗?

//@lang[1]

here你可以看到一个例子。

答案 2 :(得分:1)

以下XPath似乎可以执行您想要的操作:

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