1

我想像这样计算 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>
4

3 回答 3

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

}

}

于 2012-04-26T01:41:43.830 回答
1

您正在寻找树遍历

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

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

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

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

你具体想做什么

于 2012-04-26T01:07:46.567 回答
1

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

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

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

使用 JDOM,您可以在 Content 上使用 getParentElement() 函数,并在该函数上循环,直到有更多的父级。如果您计算每个循环,您将拥有级别....

使用 DOM 你也有一个 getParentNode()

使用 SAX,您可以在 startElement 和 endElement 方法中增加和减少“级别”。

于 2012-04-26T01:20:28.977 回答