我有一个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"必须落后于]
答案 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();