我一直在使用DOM来解析我的小xml文档。阅读有关JAXB(http://www.oracle.com/technetwork/articles/javase/index-140168.html)的内容,我打算使用JAXB实例化DOM。
如果这是一个正确的方法,请告诉我。
答案 0 :(得分:63)
JAXB与DOM和SAX无法直接比较。 Java DOM和SAX解析API是用于解析XML文档的低级API,而JAXB(用于XML绑定的Java API)是用于将XML元素和属性转换为Java对象层次结构的更高级API(反之亦然)。 JAXB的实现很可能在幕后使用DOM或SAX解析器来实际解析XML输入数据。
通常,您需要将XML文档的内容转换为Java程序中的对象。如果这是您想要做的,那么JAXB可能更容易使用,并且您需要编写的代码少于使用DOM或SAX解析API时的代码。
是否适合您的案例取决于您的项目的功能和技术要求。
答案 1 :(得分:4)
JAXB,代表用于XML绑定的Java体系结构。 JAXB用于编组(Java对象到XML表示)和Unmarshalling(XML内容到Java对象)
请关注此链接,以便更好地了解JAXB Architecture
答案 2 :(得分:4)
(已经晚了7年,但仍然)
与自己接受的答案相矛盾,我非常怀疑JAXB是在DOM之上实现的 - 这需要两个Object Model(Java和DOM),并且会完全击败XML binding(<在JAXB中强> XB 对于性能/空间来说更糟糕,它需要两个模型相互支持。
在我看来,当考虑在Java中处理XML双向映射的方法时,JAXB是DOM的明确模拟。 DOM和JAXB只是IBM称之为XOM的案例。
在几乎所有情况下,我都赞成JAXB而不是DOM,并且赞成通过SAX进行操作 - 主要是因为我发现SAX和DOM API&#34;语言不可知&#34;弯曲得完全怪诞。
显然,如果你的数据集太大而无法放入内存,那么对象模型是不可行的。否则
答案 3 :(得分:3)
从代码编写较少的角度来看,JAXB很容易。但是如果你需要更多的解析控制,你应该使用SAX解析器。它使您可以更好地控制解析,并且比DOM解析器更快。除此之外,JAXB是高级API,因此它有一些开销任务,所以它会比SAX慢一点。
答案 4 :(得分:2)
JAXB不支持XPath。您需要一个模式来生成api。如果您有未知或潜在的错误XML,您的程序将以验证错误结束。如果您只想解析不验证,则不适合容错XML处理。不适合处理未知的XML并在内部寻找已知的节点结构。复杂的XML Structures中的导航会产生大量不良的可读代码。
如果使用JAXB,则在XML结构和Java代码之间实现修复耦合。如果更改了XML,则必须更改代码并进行部署。可能会很痛苦。如果使用XPath,则可以完成解耦XML-structur和java代码,如果XPath处于外部配置中。
答案 5 :(得分:-1)
查看此帖子What is JAXB and why would I use it? 与传统的DOM和SAX解析器相比,使用JAXB总是更好。