嗨,我需要帮助才能使用 xpath 从 XML 中提取信息。
我将使用 Xpath 来提取一个以通用键开头的 Tag 的属性值:
<st:Testprova id='abcd'>
....
</st>
or
<st:Test1prova id='defg'>
....
</st>
我使用了那个 Xpath 表达式:
"//*[contains(.,'prova')]/@ID"
但不起作用。你能帮助我吗??
嗨,我需要帮助才能使用 xpath 从 XML 中提取信息。
我将使用 Xpath 来提取一个以通用键开头的 Tag 的属性值:
<st:Testprova id='abcd'>
....
</st>
or
<st:Test1prova id='defg'>
....
</st>
我使用了那个 Xpath 表达式:
"//*[contains(.,'prova')]/@ID"
但不起作用。你能帮助我吗??
您正在使用@ID
而不是@id
,这是区分大小写的。此外,您应该使用name()
来检索节点名称。
这个 XPath 表达式
//*[contains(name(),'prova')]/@id
返回abcd
和defg
尽管您的 XML 不正确,但它应该是:
<st:Testprova id='abcd'>
....
</st:Testprova>
<st:Test1prova id='defg'>
....
</st:Test1prova>
在这种情况下要使用的正确函数是matches()
。
contains() 即使对于像这样的节点名称也可以返回 true
Testprova
Prodprova
UATprova
provaTest
和其他曾经包含prova这个词的人。
但是,如果您知道节点名称的模式,那么 match() 函数会准确过滤掉所需的节点。
因此,如果我假设两个单词之间可能出现一个数字,则 xpath 可以如下所示
//*[matches(name(), '^Test[0-9]?prova$')]//@ID
注意: matches 函数是 Xpath2.0 的一部分,在 Xpath1.0 中不起作用