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

それはすべて関係についてです。JDOMでは、必要な関係は親要素の数です。

一方、必要なのが要素のレベルだけである場合、生のSAX解析はより高速で、あらゆる種類の優れたものになります。

これが宿題の場合に備えて、私は正しい方向を指し示します。

JDOMを使用すると、ContentでgetParentElement()関数を使用して、親が増えるまでループすることができます。各ループを数えると、レベルがわかります。

DOMを使用すると、getParentNode()も使用できます。

SAXを使用すると、startElementメソッドとendElementメソッドで「レベル」をインクリメントおよびデクリメントできます。

于 2012-04-26T01:20:28.977 に答える
1

あなたはツリートラバーサルを探しています

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

具体的には、深さまたは幅の2つの方法でこれを行うことができます..

これを行う Java テクノロジは複数あります。

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

具体的に何をしようとしていますか

于 2012-04-26T01:07:46.567 に答える