Java 提取属性';在特殊情况下,使用XPATH设置s值

Java 提取属性';在特殊情况下,使用XPATH设置s值,java,xml,design-patterns,xpath,tags,Java,Xml,Design Patterns,Xpath,Tags,嗨,我需要帮助用xpath从XML中提取信息 我将使用Xpath提取一个标记的属性值,该标记以泛型键工作开始: <st:Testprova id='abcd'> .... </st> or <st:Test1prova id='defg'> .... </st> 但是不起作用。您能帮我吗???您使用的是@ID而不是@ID,这是区分大小写的。此外,应该使用name()检索节点名 这个XPath表达式 //*[contains(nam

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

我将使用Xpath提取一个标记的属性值,该标记以泛型键工作开始:

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

  or

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

但是不起作用。您能帮我吗???

您使用的是
@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这个词

但是,如果您知道节点名将使用的模式,那么matches()函数会准确地过滤出所需的节点

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

//*[matches(name(), '^Test[0-9]?prova$')]//@ID
注意:匹配函数是Xpath2.0的一部分,在Xpath1.0中不起作用

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