我需要搜索特定的xml节点。我知道它的名字的一部分,但不知道整个名字......我怎么能用名称的一部分得到那个元素?
我知道可以使用xpath解决,但我不知道如何解决。例如......:
<root>
<head/>
<body> <SuperAsdf> hi </SuperAsdf>
</body>
<root/>
我知道必须是“Super”的标签,但我不知道它可能有“Asdf”,所以我需要一个xPath表达式来查找所有带有“Super”的标签。
另外,什么函数支持java中的xpath?
我正在使用getElementsByTagName,但我读到它无法解释xpath。
答案 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 library(javadoc)建议的XPath表达式:
List<Node> nodes =
XPathAPI.selectListOfNodes(doc, "//*[starts-with(local-name(), 'Super')]")
如果您的类路径上有一个符合XPath-2.0标准的处理器(例如Saxon),JAXP和XPathAPI将选择它并使用它来选择节点。
(免责声明,我是XPathAPI库的作者。)