以Java解析各种自定义XML文档的最佳方法

问题描述:

用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

我会使用Stax来解析XML,它使用起来很快且容易。我在最后一个项目中使用它来解析高达24MB的XML文件。 java.net有一个很好的介绍,它告诉你一切你需要知道的入门。

你会想要使用org.xml.sax.XMLReaderhttp://docs.oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html)。

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

  • SAX,在您使用的handler只抢你在你的XML想要什么和沟其余
  • DOM,它分析你的一直存档,并允许您以更树状的方式抓取所有元素。

另一个非常有用的XML解析方法,尽管比这些更新一些,并且仅在自Java6以来包含在JRE中,是StAX。 StAX被认为是基于树的DOM和SAX的基于事件的方法之间的中间方法。它与SAX非常相似,因为解析非常大的文档很容易,但在这种情况下,应用程序从解析器“拉”信息,而不是解析“推送”事件到应用程序。你可以在这个主题上找到更多的解释here

因此,根据您想要达到的目标,您可以使用其中一种方法。

如果你只需要解析,那么我会建议使用XPath库。这里有一个很好的参考:http://www.ibm.com/developerworks/library/x-javaxpathapi.html

但是你可能想考虑把XML转换成对象,然后天空是极限。 对于您可以使用XStream,这就是我使用了很多

使用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来得到你所需要的值一个伟大的图书馆

​​

下面是使用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)); 
     } 
    } 
}