2011-08-16 11 views
0

JDOMを使用してXMLファイルを解析し、すべての要素からいくつかの情報を取得する必要があります。JDOMを使用してXML解析を自動化するには

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <element1>something</element1> 
    <element2> 
     <subelement21>moo</subelement21> 
     <subelement22> 
      <subelement221>toto</subelement221> 
      <subelement222>tata</subelement222> 
     </subelement22> 
    </element2> 
</root> 

したがって、要素1は簡単です。しかし、要素2については、私は彼の子供を通過しなければならないし、子供が子供を持っている場合は、それらを通過するなど。

public static void getInfos(Vector<String> files) {  
    Document document = null; 
    Element root = null; 

    SAXBuilder sxb = new SAXBuilder(); 

    for (int i =0 ; i< files.size() ; i++) 
    { 
     System.out.println("n°" + i + " : " + files.elementAt(i)); 
     try 
     { 
      document = sxb.build(files.elementAt(i)); 
      root = document.getRootElement(); 

      List<?> listElements = root.getChildren(); 
      Iterator<?> it = listElements.iterator(); 

      while(it.hasNext()) 
      { 
       Element courant = (Element)it.next(); 
       System.out.println(courant.getName()); 

       if(courant.getChildren().size() > 0) 
       { 
        // here is the problem -> the element has a children 
       } 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

この場合、再帰呼び出しや他の何かのように、私は同じ機能を使用できます。

ありがとうございました。

答えて

1

SAXを使用します。私は、現在のパスがドキュメント内にあったものを追跡したcontenthandlerにスタックを保持し、バッファに自分の文字メソッドを追加します。 endElementでは、バッファからコンテンツを取得してクリアしてから、現在のパスを使って何をするかを決めます。

(これは、この文書には混合コンテンツをしていると仮定されていない。)

は、ここでは、私は簡単に再帰的なデータ構造を扱うアプローチに説明したものに拡張し、an article on using SAX to process complex XML documentsへのリンクです。 (これには、前の記事であるan introduction to SAXがあります)

+0

あなたが混在したコンテンツによって –

+0

私はxmlファイルにこのようなことがたくさんあるので、あなたの方法は私にとってはうまくいかないと思いますか? –

0

XPathを使用して、必要な要素を正確に得ることができます。例hereでは名前空間が使用されていますが、基本的な考え方があります。

関連する問題