【问题标题】:Extract attribute's value with XPATH in a special case在特殊情况下使用 XPATH 提取属性值
【发布时间】:2012-09-14 12:17:40
【问题描述】:
您好,我需要帮助才能使用 xpath 从 XML 中提取信息。
我将使用 Xpath 来提取一个以通用键开头的 Tag 的属性值:
<st:Testprova id='abcd'>
....
</st>
or
<st:Test1prova id='defg'>
....
</st>
我使用了那个 Xpath 表达式:
"//*[contains(.,'prova')]/@ID"
但不起作用。你能帮帮我吗?
【问题讨论】:
标签:
java
xml
design-patterns
xpath
tags
【解决方案1】:
您使用的是@ID 而不是@id,这是区分大小写的。此外,您应该使用name() 来检索节点名称。
这个 XPath 表达式
//*[contains(name(),'prova')]/@id
返回abcd 和defg
虽然你的 XML 不正确,但应该是:
<st:Testprova id='abcd'>
....
</st:Testprova>
<st:Test1prova id='defg'>
....
</st:Test1prova>
【解决方案2】:
在这种情况下要使用的正确函数是matches()。
contains() 即使对于像
这样的节点名称也可以返回 true
Testprova
Prodprova
UATprova
provaTest
和其他曾经包含单词 prova 的。
但是,如果您知道节点名称的模式,matches() 函数会准确过滤出所需的节点。
因此,如果我假设两个单词之间可能出现一个数字,则 xpath 可以如下所示
//*[matches(name(), '^Test[0-9]?prova$')]//@ID
注意:匹配函数是Xpath2.0的一部分,在Xpath1.0中不起作用