如何计算XML文件的深度 - DOM

时间:2012-04-26 00:55:13

标签: java dom xml-parsing sax jdom

我想像这样计算XML文件的深度:

 <?xml version="1.0"  encoding="iso-8859-1"?>
 <country> -----> Level 1
   <name> France </name> ----> Level 2
   <city> Paris </city>
   <region>
     <name> Nord-Pas De Calais </name> ---> Level 3
     <population> 3996 </population>
     <city> Lille </city>
   </region>
   <region>

   </region>
  </country>

3 个答案:

答案 0 :(得分:3)

您可以使用此功能并根据您的需要进行自定义...使用DOM解析器公共类测试{

public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document dom = db.parse("country.xml");
    Element elem = dom.getDocumentElement();        
    int level = 1;
    System.out.println(elem.getNodeName() + "--->" + level);
    NodeList nl = elem.getChildNodes();
    displayLevel(nl,level);
}

/**
 * Recursive function to go through the nodes to display the level.
 * @param nl
 * @param level
 */
private static void displayLevel(NodeList nl, int level) {      
    level++;        
    if(nl != null && nl.getLength() > 0){
        for (int i = 0; i < nl.getLength(); i++) {
            Node n = nl.item(i);
            System.out.println(n.getNodeName() + "--->" + level);               
            displayLevel(n.getChildNodes(), level);             
        }
    }else{
        return;
    }

}

}

答案 1 :(得分:1)

您正在寻找树遍历

http://en.wikipedia.org/wiki/Tree_traversal

具体来说,你可以通过深度或广度两种方式来做到这一点。

有多种Java技术可以做到这一点。

http://www.java2s.com/Code/Java/XML/TraversetheDOMtreeusingTreeWalker.htm

你具体想做什么

答案 2 :(得分:1)

这完全是关系。在JDOM中,您想要的关系是父元素的数量。

另一方面,如果您想要的只是元素的级别,那么原始SAX解析会更快并且各种更好。

万一这是作业,我只是指出正确的方向......

使用JDOM,您可以在Content上使用getParentElement()函数,并在其上循环,直到有更多父项。如果算上每个循环,你将获得等级......

使用DOM,您还有一个getParentNode()

使用SAX,您可以在startElement和endElement方法中递增和递减'level'。