Java:如何获取org.w3c.dom.Node的xpath?

时间:2011-12-07 14:55:16

标签: java xpath

我正在使用Java 1.6。给定一个org.w3c.dom.Node对象,如何获取该节点属于XML文档的String XPath表达式?此节点或其任何祖先/后代具有id属性并非给定。

2 个答案:

答案 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);
}