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

使用Java解析多个离散的自定义XML文档的最佳方法是什么?

我会使用Stax来解析XML,它使用起来快速而简单。 我一直在上一个项目中使用它来解析高达24MB的XML文件。 在java.net上有一个很好的介绍,它告诉你开始时需要知道的一切。

基本上,Java中有两种主要的XML解析方法:

  • SAX ,您使用处理程序仅在XML中获取所需内容,然后放弃其余内容
  • DOM ,它一直解析您的文件,并允许您以更像树的方式获取所有元素。

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

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

您将需要使用org.xml.sax.XMLReaderhttp://docs.oracle.com/javase/7/docs/api/org/xml/sax/XMLReader.html )。

如果您只需要解析,那么我建议使用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获取所需的值

 public void get_author(Document document) { Node node = document.selectSingleNode( "//AppealRequestProcessRequest/author" ); String author = node.getText(); return author; } 

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