XPath:找到一个属性节点(并且只有一个)
问题描述:
什么是XPath找到只有一个节点(无论哪个)具有某个属性(实际上我对属性感兴趣,而不是节点)。例如,在我的XML中,我有几个具有lang属性的标签。我知道他们都必须具有相同的价值。我只想得到他们中的任何一个。XPath:找到一个属性节点(并且只有一个)
现在,我这样做://*[1][@lang]/@lang
,但它似乎不能正常工作,原因不明。我试图让我把所有的@lang值('en en en ...')连接到任何东西,有时候在我想要的而不是所有的XML中。
编辑:
其实//@lang[1]
不能工作,因为功能position()
是在lang
属性存在测试之前调用。所以它总是需要XML中找到的第一个元素。它在当时效果最好,因为很多次,lang属性都在根元素上。
答
一些抢断后,这里是一个有效的解决方案:
(//@lang)[1]
括号需要对[1]
从属性名称分开,否则position()
函数应用于属性的父元素内(这是无用的,因为在标签内只能有一个特定名称的属性:这就是为什么//@lang[2]
总是选择noth荷兰国际集团)。
答
以下XPath似乎做你想要什么:
//*[@lang][1]/attribute::lang
不,我没有!乍一看似乎好多了,我马上做一个彻底的测试!谢谢。 – glmxndr 2009-07-09 07:25:37
实际上它不能正常工作,它会选择其父元素中的所有第一个lang元素。 – glmxndr 2009-07-21 08:36:00