我应该使用什么xml解析器?

时间:2010-01-04 20:21:45

标签: java xml xpath parsing

我有一个有点大文件(~500KiB),有很多小元素(~3000)。我想从中选择一个元素并将其解析为java类。

属性 简化

<xml>     
<attributes>
  <attribute>
     <id>4</id>
     <name>Test</id>
  </attribute>

  <attribute>
     <id>5</id>
     <name>Test2</name>
  </attribute>

<!--3000 more go here-->
</attributes>

简化

public class Attribute{
  private int id;
  private String name;

  //Mutators and accessors

}

我有点像XPath,但人们建议使用Stax甚至是VDT-XML。我该怎么办。

7 个答案:

答案 0 :(得分:3)

500 kb并不是那么大。如果你喜欢XPath,那就去吧。

答案 1 :(得分:3)

  

我有点像XPath,但人们建议使用Stax甚至是VDT-XML。我该怎么办。

DOM,SAX和VTD-XML都是解析XML文档的三种不同方法。大致按照这种内存效率的顺序。 DOM需要超过5倍的内存,因为XML文件很大。 SAX只是效率更高,VTD-XML只使用比XML文件大一点的内存,大约是1.2倍。

XPath只是一种从(解析的)XML文档中选择元素和/或数据的方法。

换句话说,您可以将XPath与任何XML解析器结合使用。所以这毕竟是一个不关心的问题。如果您只想获得最佳内存效率和性能,请选择VTD-XML。

答案 2 :(得分:2)

避免使用任何DOM解析器 - 不需要,尤其是使用大型文件和相对简单的XML语法。

使用哪一个特定的,抱歉,我没有使用它们,所以我不能给你任何更多的指导,而不是看你的许可,性能和支持(问题)。

答案 3 :(得分:2)

我最喜欢的XML库是Dom4j

答案 4 :(得分:2)

我上面也有评论,因为几乎没有什么选择可以考虑 - 但是听到它的初步描述我认为你可以在这里使用一个简单的SAX处理器:它可能运行得更快(尽管它可能不会与其他机制相比,在映射Java类时看起来很漂亮:

这里有一个例子,它与你的例子非常接近:

http://www.informit.com/articles/article.aspx?p=26351&seqNum=6

答案 5 :(得分:1)

每当我必须处理XML时,我只使用XMLBeans。你所追求的东西可能有点过分,但它会让生活变得简单(一旦你知道如何使用它)。

答案 6 :(得分:1)

如果您根本不关心性能,Apache Digester可能对您有用,因为它会在您定义规则后为您初始化Java对象。