1

嗨,我需要帮助才能使用 xpath 从 XML 中提取信息。

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

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

  or

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

我使用了那个 Xpath 表达式:

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

但不起作用。你能帮助我吗??

4

2 回答 2

2

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

这个 XPath 表达式

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

返回abcddefg

尽管您的 XML 不正确,但它应该是:

<st:Testprova id='abcd'>
  ....
</st:Testprova>
<st:Test1prova id='defg'>
  ....
</st:Test1prova>
于 2012-09-14T12:20:35.403 回答
1

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

contains() 即使对于像这样的节点名称也可以返回 true

Testprova
Prodprova
UATprova
provaTest

和其他曾经包含prova这个词的人。

但是,如果您知道节点名称的模式,那么 match() 函数会准确过滤掉所需的节点。

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

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

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

于 2012-09-14T13:22:53.943 回答