在特殊情况下使用XPATH提取属性的值

时间:2012-09-14 12:17:41

标签: java xml design-patterns xpath tags

我需要帮助从xpath中提取XML信息。

我将使用Xpath来提取以通用关键字开头的一个Tag的属性值:

<st:Testprova id='abcd'>
  ....
</st>

  or

<st:Test1prova id='defg'>
  ....
</st>

我使用了Xpath表达式:

"//*[contains(.,'prova')]/@ID"

但不起作用。你能救我吗?

2 个答案:

答案 0 :(得分:2)

您使用@ID代替@id,这是区分大小写的。此外,您应该使用name()来检索节点名称。

此XPath表达式

//*[contains(name(),'prova')]/@id

返回abcddefg

虽然您的XML不正确,但应该是:

<st:Testprova id='abcd'>
  ....
</st:Testprova>
<st:Test1prova id='defg'>
  ....
</st:Test1prova>

答案 1 :(得分:1)

在这种情况下使用的正确函数是matches()

即使对于像

这样的节点名,

contains()也可以返回true

Testprova
Prodprova
UATprova
provaTest

和其他包含单词prova的人。

但是如果你知道节点名称所使用的模式,那么matches()函数就会过滤掉所需的节点。

因此,如果我假设两个单词之间可能出现一个数字,则xpath可以写成如下所示

//*[matches(name(), '^Test[0-9]?prova$')]//@ID

注意:匹配函数是Xpath2.0的一部分,在Xpath1.0中不起作用

相关问题