2011-08-16 39 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> 

因此,對於element1來說很簡單。但是對於元素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。我會在內容處理程序中保留一個堆棧,以跟蹤文檔中當前的路徑,並保留一個我的字符方法附加到的緩衝區。在endElement中,我會從緩衝區獲取內容並將其清除,然後使用當前路徑來決定如何處理它。

(這是假設本文件沒有混合內容。)

下面是an article on using SAX to process complex XML documents一個鏈接,它擴展了什麼,我簡要描述成處理遞歸數據結構的方法。 (它也有一個前身文章,即an introduction to SAX。)

+0

你說的混合內容意味着 –

+0

@OpenMind:混合的內容就像是你在HTML看看,那裏有你喜歡的東西「 ASDF ZXCV QWERTY」,使有一個以上的元素文本節點。 –

+0

我在我的xml文件中有很多這樣的東西,所以我認爲你的方法不適合我? –