我有一个有点大文件(~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。我该怎么办。
答案 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对象。