Java XPath local-name()

Java XPath local-name(),java,xpath,Java,Xpath,我有一个xml节点名数组 searchElementsXml = new String[]{"name", "id", "version", "description", "keywords", "authorInfos/authorInfo/name", "status"}; 我找到了一个通过使用本地名称在线避免名称空间前缀的解决方案 expression = "//*[local-name()=" + searchElementsXml[j] +"]/childnode"; 如何改进表达

我有一个xml节点名数组

searchElementsXml = new String[]{"name", "id", "version", "description", "keywords", "authorInfos/authorInfo/name", "status"};
我找到了一个通过使用本地名称在线避免名称空间前缀的解决方案

expression = "//*[local-name()=" + searchElementsXml[j] +"]/childnode";
如何改进表达式字符串,以便还可以使用数组元素“authornfos/authornfo/name”


我当前的解决方案似乎不起作用,因为“/authorInfo/name”必须位于
]

的后面。最好的解决方案是编写一个简单的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();