2011-12-07 86 views
1

我正在使用Java 1.6。给定一个org.w3c.dom.Node对象,如何获取String XPath表达式来表示该节点落入XML文档中的位置?这个节点或它的任何祖先/后代都不具有id属性。Java:如何为org.w3c.dom.Node获取xpath?

+1

这已经回答了很多次对JavaScript的SO。您可能会看到其中一些答案。像这样一个:http://stackoverflow.com/questions/2661818/javascript-get-xpath-of-a-node –

回答

1

我不相信通过DOM有任何简单的方法。问题在于,没有一种标准的方法来识别给定的节点。

说了这么多,你可能会从diffxml有用的发现功能getXPath:http://diffxml.cvs.sourceforge.net/viewvc/diffxml/diffxml/src/java/org/diffxml/diffxml/fmes/NodeOps.java?view=markup

它将返回表格/节点(的一个XPath)[4] /节点()[2]等

更新:由于diffxml是GPL许可和getXPath需要一点提取,我发布它作为github上的XPathGen:https://github.com/amouat/XPathGen在Apache许可证下。

+0

有可能没有*规范*的方式来表示节点,但你总是可以准确地做到这一点位置。 –

+0

@lwburk这就是链接的代码:) –

+0

我使用这样的代码来进行调试。好东西。 – JohnnyK

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