2009-07-09 63 views
4

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

现在,我这样做://*[1][@lang]/@lang,但它似乎不能正常工作,原因不明。我试图让我把所有的@lang值('en en en ...')连接到任何东西,有时候在我想要的而不是所有的XML中。


编辑:

其实//@lang[1]不能工作,因为功能position()是在lang属性存在测试之前调用。所以它总是需要XML中找到的第一个元素。它在当时效果最好,因为很多次,lang属性都在根元素上。

回答

6

一些抢断后,这里是一个有效的解决方案:

(//@lang)[1] 

括号需要对[1]从属性名称分开,否则position()函数应用于属性的父元素内(这是无用的,因为在标签内只能有一个特定名称的属性:这就是为什么//@lang[2]总是选择noth荷兰国际集团)。

2

你试过这个吗?

//@lang[1] 

here你可以看到一个例子。

+0

不,我没有!乍一看似乎好多了,我马上做一个彻底的测试!谢谢。 – glmxndr 2009-07-09 07:25:37

+0

实际上它不能正常工作,它会选择其父元素中的所有第一个lang元素。 – glmxndr 2009-07-21 08:36:00

1

以下XPath似乎做你想要什么:

//*[@lang][1]/attribute::lang 
相关问题