2011-10-07 54 views
0

我需要搜索特定的xml节点。我知道它的名字的一部分,但不知道它的全名......我怎样才能得到这个名称的一部分?如何在java中搜索xml标签名

我知道它可以用xpath解决,但我不知道如何。例如...:

<root> 
<head/> 
<body> <SuperAsdf> hi </SuperAsdf> 
</body> 
<root/> 

我知道必须与“超级”标签,但我不知道,它可能有“ASDF”,所以我需要一个XPath表达式查找所有与标签“超”。

此外,什么函数在java中支持xpaths?

我正在使用getElementsByTagName,但我读到它无法解释xpath。

回答

2

正则表达式将是矫枉过正为此目的。只需使用XPath表达式,如:

"//*[starts-with(local-name(), 'Super')]" 

关于XPath的Java函数...看到the code here例如,或者看看类XPathFactory。在你的类路径,JAXP和XPathAPI类

List<Node> nodes = 
    XPathAPI.selectListOfNodes(doc, "//*[starts-with(local-name(), 'Super')]") 

如果你有一个XPath的2.0兼容的处理器(例如撒克逊):

0

XPath 1.0不支持正则表达式,但您仍然可以执行类似this的操作来实现您正在尝试执行的操作(仅使用XPath函数)。

Xpath 2.0支持像matches()replace()(更多信息here)功能的正则表达式。

你的情况正则表达式将如下所示:

(Super).* 
0

您可以使用XPath表达式LarsH建议用XPathAPI libraryjavadoc)将选取它并使用它来选择节点。

(免责声明,我是XPathAPI库的作者。)