2008-08-22 23 views
7

用Java解析多個離散自定義XML文檔的最佳方法是什麼?以Java解析各種自定義XML文檔的最佳方法

+1

告訴我們你有多遠 - 我們不會爲你寫。你想用DOM,SAX還是其他?你到目前爲止嘗試過哪些?你看過哪些教程/文檔? – mdm 2011-03-14 13:19:47

+0

使用java dom api或sax進行xml解析。給出更具體的XML結構。 – 0xAX 2011-03-14 13:20:02

回答

5

我會使用Stax來解析XML,它使用起來很快且容易。我在最後一個項目中使用它來解析高達24MB的XML文件。 java.net有一個很好的介紹,它告訴你一切你需要知道的入門。

4

基本上,你在Java中兩個主要的XML解析方法:

  • SAX,在您使用的handler只搶你在你的XML想要什麼和溝其餘
  • DOM,它分析你的一直存檔,並允許您以更樹狀的方式抓取所有元素。

另一個非常有用的XML解析方法,儘管比這些更新一些,並且僅在自Java6以來包含在JRE中,是StAX。 StAX被認爲是基於樹的DOM和SAX的基於事件的方法之間的中間方法。它與SAX非常相似,因爲解析非常大的文檔很容易,但在這種情況下,應用程序從解析器「拉」信息,而不是解析「推送」事件到應用程序。你可以在這個主題上找到更多的解釋here

因此,根據您想要達到的目標,您可以使用其中一種方法。

2

使用dom4j

首先閱讀文檔

import java.net.URL; 

import org.dom4j.Document; 
import org.dom4j.DocumentException; 
import org.dom4j.io.SAXReader; 

public class Foo { 

    public Document parse(URL url) throws DocumentException { 
     SAXReader reader = new SAXReader(); 
     Document document = reader.read(url); 
     return document; 
    } 
} 

然後使用XPath來得到你所需要的值一個偉大的圖書館

​​
0

下面是使用vtd-xml提取一些數值的代碼。

import com.ximpleware.*; 

public class extractValue{ 
    public static void main(String s[]) throws VTDException, IOException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("input.xml", false)); 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     ap.selectXPath("/aa/bb[name='k1']/value"); 
     int i=0; 
     while ((i=ap.evalXPath())!=-1){ 
      System.out.println(" value ===>"+vn.toString(i)); 
     } 
    } 
}