如何在java中搜索xml标记名称

时间:2011-10-07 15:07:19

标签: java xml xpath

我需要搜索特定的xml节点。我知道它的名字的一部分,但不知道整个名字......我怎么能用名称的一部分得到那个元素?

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

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

我知道必须是“Super”的标签,但我不知道它可能有“Asdf”,所以我需要一个xPath表达式来查找所有带有“Super”的标签。

另外,什么函数支持java中的xpath?

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

3 个答案:

答案 0 :(得分:2)

为此目的,正则表达式会过度。只需使用XPath表达式,如:

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

关于XPath的Java函数...例如,请参阅the code here,或查看课程XPathFactory

答案 1 :(得分:0)

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

Xpath 2.0支持使用matches()replace()等函数的正则表达式(更多信息here)。

您案例中的正则表达式如下所示:

(Super).*

答案 2 :(得分:0)

您可以使用LarsH为XPathAPI libraryjavadoc)建议的XPath表达式:

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

如果您的类路径上有一个符合XPath-2.0标准的处理器(例如Saxon),JAXP和XPathAPI将选择它并使用它来选择节点。

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