2012-04-26 73 views
1

我想算一個XML文件中像這樣的深度:怎麼算一個XML文件的深度 - DOM

<?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> 
+0

那麼,什麼一直是你的方法這麼遠?你有什麼嘗試不起作用? – kaveman 2012-04-26 00:57:30

+1

你想要的結果是什麼?找到文檔的最深處?或者只是一個通用的方法來計算嵌套的子節點的數量。根據我的經驗,節點深度通常並不重要,因爲它們通常是通過節點名稱找到的。 – botbot 2012-04-26 01:00:34

回答

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

} 

}

+0

我如何顯示最大深度,在我的例子中,最大深度是3 – 2012-04-26 14:45:27

1

這是所有關於關係。在JDOM中,你想要的關係是父元素的數量。另一方面,如果你想要的只是元素的級別,那麼原始的SAX解析會更快,並且各種更好。

以防萬一,這是家庭作業,我就在正確的方向指向....

用JDOM您可以使用該上的內容getParentElement()函數,循環,直到有AR ENO更多父母。如果算上每一個循環,你將有水平....

與DOM你也有一個getParentNode()

用SAX,你可以增加和減少的的startElement和endElement方法「等級」。