2012-04-22 100 views
0

我有一個麻煩解析所謂「的test.xml」像這樣的XML文件:遞歸解析XML文件JDOM

<?xml version="1.0" encoding="iso-8859-1"?> 
<un> 
<deux> <cinq></cinq> <six></six> <sept></sept> </deux> 
<trois> <huit></huit><noeuf></noeuf> </trois> 
<quatre><dix></dix><onze></onze> </quatre> 
</un> 

我想這樣的結構: [[[聯合國] ,[[deux,trois,quatre]],[[cinq,six,sept],[huit,noeuf],[dix,onze]]] 但是我得到這個 [[[cinq,six,sept]], [HUIT,noeuf],[迪克斯的Onze],[德塞夫勒,三河,世嘉]]]

這裏是我的代碼:

import java.util.ArrayList; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Element; 

public class Wassim { 

/** 
* @param args 
*/ 

public static void GetAllXml(ArrayList<ArrayList<ArrayList<String>>> ListTree, Node node) 
{ 
    ArrayList<ArrayList<String>> child = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> childOfChild = new ArrayList<String>(); 

    NodeList nl= node.getChildNodes(); 
    if (nl.getLength()>0) 
    { 
    for (int i=0;i<nl.getLength();i++) 
    { 

      Node n = nl.item(i); 
      if (n instanceof Element) 
      { 

       childOfChild.add(n.getNodeName()); 
       GetAllXml(ListTree, n); 
      } 
    } 
    child.add(childOfChild); 
    ListTree.add(child); 
    } 

} 


public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    try{ 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder parser = factory.newDocumentBuilder(); 
     Document doc = parser.parse("test.xml"); 
     Node root = doc.getDocumentElement(); 
     ArrayList<ArrayList<ArrayList<String>>> ListTree = new ArrayList<ArrayList<ArrayList<String>>>(); 
     GetAllXml(ListTree, root); 
     System.out.println(ListTree); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 
} 

回答

1

它是每個元件的兩個步驟:

  1. 添加所有子元素以列表
  2. 過程的所有子元素

像這樣:

private static List<Element> getChildren(Node parent) { 
    NodeList nl = parent.getChildNodes(); 
    List<Element> children = new ArrayList<Element>(nl.getLength()); 
    for (int i = 0; i < nl.getLength(); i++) { 
     Node n = nl.item(i); 
     if (n instanceof Element) 
      children.add((Element) n); 
    } 
    return children; 
} 

public static void GetAllXml(
    ArrayList<ArrayList<ArrayList<String>>> ListTree, Node node) { 
    ArrayList<ArrayList<String>> child = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> childOfChild = new ArrayList<String>(); 

    List<Element> children = getChildren(node); 
    // add children node names 
    for (Element e : children) 
     childOfChild.add(e.getNodeName()); 

    if (childOfChild.size() > 0) { 
     child.add(childOfChild); 
     ListTree.add(child); 
    } 

    // process next level 
    for (Element e : children) 
     GetAllXml(ListTree, e); 
} 
+0

我執行你的代碼,我得到這[[[deux,trois,quatre]],[[cinq,six,sept]],[[huit,noeuf]],[[dix,onze]]] [deux,trois,quatre]],[[cinq,six,sept],[hui t,noeuf],[dix,onze]]] – 2012-04-23 22:54:37