I have been using DOM for parsing my small xml docs for sometime.Afer reading about the JA开发者_如何学PythonXB (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.
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.
(~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
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.
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
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.
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.
精彩评论