我试图选择属性等于某事的所有节点,我在标题中得到了错误。
我的Xpath字符串看起来像//@[id=****]
,有人知道什么是错的吗?
答案 0 :(得分:4)
您的XPath表达式可能应该是:
//*[@id='something']
这意味着匹配文档中任何位置id
属性等于something
的所有元素。
编辑:如果您想要id
属性节点本身而不是其父元素,则可以使用:
//*[@id='something']/@id
甚至更好,正如@Dimitre Novatchev建议的那样:
//@id[. = 'something']
答案 1 :(得分:0)
我正在尝试选择所有节点 属性等于某事,我得到了 标题中的错误。
我的Xpath字符串看起来像
//@[id=****]
,任何人都知道是什么 错?
这个表达的很多问题:
0.1。 //@[some-condition]
谓词只能应用于所选节点,但//@
不会选择任何节点。 @
是attribute::
的缩写,这是一个未完成的节点测试。它在这里缺少节点类型或节点名称。
正确的是://@*[some-condition]
或//@attrName[some-condition]
0.2。 id=****
语法无效,除非 * *本身是有效的XPath表达式。我的猜测是你想要获得所有属性值等于某个已知的文字值。在任何这种情况下,要使用的语法是id='someLiteral
- 请注意文字值周围的单引号(它们也可以是双引号)。
<强>解决方案强>:
//*[@id='something']
这将选择XML文档中具有值为id
的属性'something'
的所有元素。
//@id[. = 'something']
这将选择XML文档中名为id
的所有属性,其值为'something'
。
//@*[. = 'something']
这将选择XML文档中的所有属性(无论其名称如何),其值为'something'
。