JAXB vs DOM and SAX

2019-01-31 02:04发布

问题:

I have been using DOM for parsing my small xml docs for sometime.Afer reading about the JAXB (http://www.oracle.com/technetwork/articles/javase/index-140168.html), I'm planning to use JAXB instaed of DOM.

Please let me know if this will be a right approach.

回答1:

JAXB is not directly comparable to DOM and SAX. The Java DOM and SAX parsing APIs are lower-level APIs to parse XML documents, while JAXB (Java API for XML Binding) is a higher-level API for converting XML elements and attributes to a Java object hierarchy (and vice versa). Implementations of JAXB will most likely use a DOM or SAX parser behind the scenes to do the actual parsing of the XML input data.

Often you'll want to convert the content of an XML document into objects in your Java program. If this is what you want to do, then JAXB will probably be easier to use and you'll need to write less code than when you would be using the DOM or SAX parsing API.

Whether it's the right approach for your case depends on exactly what the functional and technical requirements are for your project.



回答2:

JAXB, stands for Java Architecture for XML Binding. JAXB is used to Marshalling(Java objects to XML representations) and Unmarshalling (XML contents to Java object)

please follow this link for good understanding of JAXB Architecture



回答3:

(~7 years too late, but still)

To contradict the accepted answer, I highly doubt JAXB is implemented on top of DOM - that would require two Object Models (Java and DOM) and would entirely defeat the point of XML binding (the XB in JAXB) worse for performance/space it would require both models to back each other.

Seems to me JAXB is a clear analog of DOM when considering approaches to handling XML bi-directional mapping in Java. DOM and JAXB are just cases of what IBM calls XOM.

In almost all cases I'd favour JAXB over DOM, and favour handrolled over SAX - primarily because I find the SAX and DOM API's "language agnostic" bent utterly grotesque.


Obviously if your dataset is too big to fit into memory then an Object Model isn't viable. Otherwise

How to choose:

  • Have a Java model, or are loading one from XML? it's serialization, just use JAXB
  • No Java model, time/space paramount, simple single pass attribute/element querying, schema unknown? Use SAX
  • No Java model and time/space paramount but schema is known, unchanging and simple? Roll your own, seriously it's trivial (however do use an XSD and JAXB and codegen to test your implementation)
  • Is XML schema unknown a priori, subject to change without notification, or permits arbitrary unknown (namespaced) extensions? Use DOM
  • Is XML schema locked or you own it? Use JAXB


回答4:

JAXB will be easy from the sense of less code writing. But if you need more control on parsing you should use SAX parser . It gives you more control over parsing and it faster then DOM parser. Apart from it , JAXB is high level API,so it has some overhead task so it will be bit slower then SAX.



回答5:

JAXB don't support XPath. You need a schema to generate the api. If you have a unknown or a potential bad XML your program end by validation error. Not good for error tolerant XML processing, if you want only parsing not validation. Not good for processing unknown XML and looking for known node structures inside. Navgation in complicate XML Structures produce a lot of bad readable code.

If you use JAXB you implement a fix coupling between the XML structure and your java code. If XML is changed you must change your code and deploy it. May be painful. If you use XPath you can complete decoupling XML-structur and java code, if XPath is in external configuration.



回答6:

Check this post What is JAXB and why would I use it? Its always better to use JAXB over the conventional DOM and SAX parser.