我正在使用Java 1.6。给定一个org.w3c.dom.Node
对象,如何获取该节点属于XML文档的String XPath表达式?此节点或其任何祖先/后代具有id
属性并非给定。
答案 0 :(得分:1)
我不相信通过DOM有任何简单的方法。问题是没有一种规范的方法来识别给定节点。
话虽如此,您可能会发现diffxml中的函数getXPath很有用:http://diffxml.cvs.sourceforge.net/viewvc/diffxml/diffxml/src/java/org/diffxml/diffxml/fmes/NodeOps.java?view=markup
它将返回格式为/ node()[4] / node()[2]等的XPath。
更新:由于diffxml已获得GPL许可且getXPath需要一些解压缩,因此我在Apache许可下将其作为XPathGen在github上发布:https://github.com/amouat/XPathGen。
答案 1 :(得分:0)
您可以将节点和空字符串传递给递归方法,例如:
static void xpm(Node node, String xpath){
if (node.getParentNode()==null){
System.out.println(xpath);
return;
}
xpath = "/"+node.getNodeName()+xpath;
node = node.getParentNode();
xpm(node, xpath);
}