XPath本地名称()

时间:2017-12-29 17:54:51

标签: java xpath

我有一个xml节点名称数组

searchElementsXml = new String[]{"name", "id", "version", "description", "keywords", "authorInfos/authorInfo/name", "status"};

我找到了一种解决方案,可以使用local-name来避免名称空间前缀在线。

expression = "//*[local-name()=" + searchElementsXml[j] +"]/childnode";

如何改进表达式字符串,以便我也可以使用我的数组元素" authorInfos / authorInfo / name" ?

我目前的解决方案似乎不起作用,因为" / authorInfo / name"必须落后于]

1 个答案:

答案 0 :(得分:0)

最好的解决方案是编写一个简单的NamespaceContext实现,并将限定名称放在XPath表达式中。

但是,如果您真的想继续这样做,可以通过将层次结构中的每个元素名称附加为自己的local-name()测试来创建XPath表达式:

StringBuilder exprBuilder = new StringBuilder("//");

for (String element : searchElementsXml[j].split("/")) {
    exprBuilder.append("*[local-name()='" + element + "']/");
}

exprBuilder.append("childnode");

expression = exprBuilder.toString();