2012-04-22 2 views
0

XMLファイルJDOM解析:私はこのような構造を取得したい再帰私はこのような「のtest.xml」と呼ばれるXMLファイルの解析に問題があり

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

を: [[[UN]] [[[cinq、six、sept]]、[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [[ユイット、noeuf]]、[[DIX、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

各要素のための2つのステップの手順です:

  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

Iあなたのコードを実行して、私はこれを得る[deux、trois、quatre]、[[cinq、six、sept]]、[[huit、noeuf]]、[[dix、onze]]] [deux、trois、quatre]]、[cinq、six、sept]、[hui] t、noeuf]、[dix、onze]]] –

関連する問題