J0 1 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Java XML parsing.

Slides:



Advertisements
Similar presentations
I/O Basics 12 January 2014Smitha N. Pai, CSE Dept.1.
Advertisements

XML Configuration in Java David Roossien CS62112/2009.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
The Java Platform and XML Portable Code, Portable Data James Duncan Davidson Staff Engineer, Sun Microsystems, Inc.
Technische universität dortmund Service Computing Service Computing Prof. Dr. Ramin Yahyapour IT & Medien Centrum 22. Oktober 2009.
XML e X tensible M arkup L anguage (XML) By: Subhadeep Samantaray.
SE 5145 – eXtensible Markup Language (XML ) DOM (Document Object Model) (Part II – Java API) /Spring, Bahçeşehir University, Istanbul.
XML et JAVA SAX, DOM, xmlPull…. Plan zJAXP ySAX yDOM.
XML Parsing Using Java APIs AIP Independence project Fall 2010.
SDPL 2002Notes 3: XML Processor Interfaces1 3.3 JAXP: Java API for XML Processing n How can applications use XML processors? –A Java-based answer: through.
SDPL 2003Notes 3: XML Processor Interfaces1 3.3 JAXP: Java API for XML Processing n How can applications use XML processors? –A Java-based answer: through.
XML Parsers By Chongbing Liu. XML Parsers  What is a XML parser?  DOM and SAX parser API  Xerces-J parsers overview  Work with XML parsers (example)
SAX A parser for XML Documents. XML Parsers What is an XML parser? –Software that reads and parses XML –Passes data to the invoking application –The application.
14-Jun-15 DOM. SAX and DOM SAX and DOM are standards for XML parsers-- program APIs to read and interpret XML files DOM is a W3C standard SAX is an ad-hoc.
Parsing XML into programming languages JAXP, DOM, SAX, JDOM/DOM4J, Xerces, Xalan, JAXB.
Xerces The Apache XML Project Yvonne Yao. Introduction Set of libraries that provides functionalities to parse XML documents Set of libraries that provides.
21-Jun-15 SAX (Abbreviated). 2 XML Parsers SAX and DOM are standards for XML parsers-- program APIs to read and interpret XML files DOM is a W3C standard.
26-Jun-15 SAX. SAX and DOM SAX and DOM are standards for XML parsers--program APIs to read and interpret XML files DOM is a W3C standard SAX is an ad-hoc.
MC365 XML Parsers. Today We Will Cover: An overview of the Java API’s used for XML processing Creating an XML document in Java Parsing an XML document.
28-Jun-15 StAX Streaming API for XML. XML parser comparisons DOM is Memory intensive Read-write Typically used for documents smaller than 10 MB SAX is.
JAX- Java APIs for XML by J. Pearce. Some XML Standards Basic –SAX (sequential access parser) –DOM (random access parser) –XSL (XSLT, XPATH) –DTD Schema.
XML: Java Dr Andy Evans. Java and XML Couple of things we might want to do: Parse/write data as XML. Load and save objects as XML. We’ll mainly discuss.
CSE 6331 © Leonidas Fegaras XML Tools1 XML Tools Leonidas Fegaras.
17 Apr 2002 XML Programming: JAXP Andy Clark. Java API for XML Processing Standard Java API for loading, creating, accessing, and transforming XML documents.
SDPL 2003Notes 3: XML Processor Interfaces1 3. XML Processor APIs n How can applications manipulate structured documents? –An overview of document parser.
XML for E-commerce II Helena Ahonen-Myka. XML processing model n XML processor is used to read XML documents and provide access to their content and structure.
1 XML at a neighborhood university near you Innovation 2005 September 16, 2005 Kwok-Bun Yue University of Houston-Clear Lake.
SDPL 2004Notes 3: XML Processor Interfaces1 3.3 JAXP: Java API for XML Processing n How can applications use XML processors? –A Java-based answer: through.
SAX Parsing Presented by Clifford Lemoine CSC 436 Compiler Design.
Advanced Java Session 9 New York University School of Continuing and Professional Studies.
CSE 6331 © Leonidas Fegaras XML Tools1 XML Tools.
3/29/2001 O'Reilly Java Java API for XML Processing 1.1 What’s New Edwin Goei Engineer, Sun Microsystems.
SDPL 2002Notes 3: XML Processor Interfaces1 3. XML Processor APIs n How can applications manipulate structured documents? –An overview of document parser.
XML Parsers Overview  Types of parsers  Using XML parsers  SAX  DOM  DOM versus SAX  Products  Conclusion.
SAX. What is SAX SAX 1.0 was released on May 11, SAX is a common, event-based API for parsing XML documents Primarily a Java API but there implementations.
Beginning XML 4th Edition. Chapter 12: Simple API for XML (SAX)
XML Processing in Java. Required tools Sun JDK 1.4, e.g.: JAXP (part of Java Web Services Developer Pack, already in Sun.
Java API for XML Processing (JAXP) Dr. Rebhi S. Baraka Advanced Topics in Information Technology (SICT 4310) Department of Computer.
Sheet 1XML Technology in E-Commerce 2001Lecture 3 XML Technology in E-Commerce Lecture 3 DOM and SAX.
SDPL Streaming API for XML1 3.4 Streaming API for XML (StAX) n Could we process XML documents more conveniently than with SAX, and yet more efficiently?
CSE 6331 © Leonidas Fegaras XML Tools1 XML Tools.
Document Object Model DOM. Agenda l Introduction to DOM l Java API for XML Parsing (JAXP) l Installation and setup l Steps for DOM parsing l Example –Representing.
Java and XML. What is XML XML stands for eXtensible Markup Language. A markup language is used to provide information about a document. Tags are added.
© Marty Hall, Larry Brown Web core programming 1 Simple API for XML SAX.
SAX2 and DOM2 Kanda Runapongsa Dept. of Computer Engineering Khon Kaen University.
XML and SAX (A quick overview) ● What is XML? ● What are SAX and DOM? ● Using SAX.
When we create.rtf document apart from saving the actual info the tool saves additional info like start of a paragraph, bold, size of the font.. Etc. This.
1 Introduction JAXP. Objectives  XML Parser  Parsing and Parsers  JAXP interfaces  Workshops 2.
SDPL 20063: XML Processor Interfaces1 3. XML Processor APIs n How can (Java) applications manipulate structured (XML) documents? –An overview of XML processor.
7-Mar-16 Simple API XML.  SAX and DOM are standards for XML parsers-- program APIs to read and interpret XML files  DOM is a W3C standard  SAX is an.
1 Validation SAX-DOM. Objectives 2  Schema Validation Framework  XML Validation After Transformation  Workshops.
USING ANDROID WITH THE DOM. Slide 2 Lecture Summary DOM concepts SAX vs DOM parsers Parsing HTTP results The Android DOM implementation.
1 Introduction SAX. Objectives 2  Simple API for XML  Parsing an XML Document  Parsing Contents  Parsing Attributes  Processing Instructions  Skipped.
Java API for XML Processing
Simple API for XML SAX. Agenda l Introduction to SAX l Installation and setup l Steps for SAX parsing l Defining a content handler l Examples Printing.
Parsing with SAX using Java Kanda Runapongsa Dept. of Computer Engineering Khon Kaen University.
XML Parsers Overview Types of parsers Using XML parsers SAX DOM
In this session, you will learn to:
Parsing XML into programming languages
Java XML IS
Java/XML.
Data Modeling II XML Schema & JAXB Marc Dumontier May 4, 2004
XML Parsers Overview Types of parsers Using XML parsers SAX DOM
Java API for XML Processing
A parser for XML Documents
XML Programming in Java
SAX2 29-Jul-19.
Presentation transcript:

J0 1 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Java XML parsing

J0 2 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Tree-based API A tree-based API compiles an XML document into an internal tree structure. This makes it possible for an application program to navigate the tree to achieve its objective. The Document Object Model (DOM) working group at the W3C is developing a standard tree-based API for XML. Event-based API An event-based API reports parsing events (such as the start and end of elements) to the application using callbacks. The application implements and registers event handlers for the different events. Code in the event handlers is designed to achieve the objective of the application. The process is similar (but not identical) to creating and registering event listeners in the Java Delegation Event Model. Tree-based vs Event-based API

J0 3 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento SAX is a set of interface definitions For the most part, SAX is a set of interface definitions. They specify one of the ways that application programs can interact with XML documents. (There are other ways for programs to interact with XML documents as well. Prominent among them is the Document Object Model, or DOM) SAX is a standard interface for event-based XML parsing, developed collaboratively by the members of the XML-DEV mailing list. SAX 1.0 was released on Monday 11 May 1998, and is free for both commercial and noncommercial use. The current version is SAX (released on 29-January 2002) See what is SAX?

J0 4 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento JAXP: Java API for XML Processing This API provides a common interface for creating and using the standard SAX, DOM, and XSLT APIs in Java, regardless of which vendor's implementation is actually being used. The main JAXP APIs are defined in the javax.xml.parsers package. That package contains two vendor-neutral factory classes: SAXParserFactory and DocumentBuilderFactory that give you a SAXParser and a DocumentBuilder, respectively. The DocumentBuilder, in turn, creates DOM-compliant Document object. The actual binding to a DOM or SAX engine can be specified using the System properties (but a default is provided). JAXP

J0 5 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento org.xml.sax Defines the basic SAX APIs. The "Simple API" for XML (SAX) is the event-driven, serial-access mechanism that does element-by-element processing. The API for this level reads and writes XML to a data repository or the Web. org.w3c.dom Defines the Document class (a DOM), as well as classes for all of the components of a DOM. The DOM API is generally an easier API to use. It provides a familiar tree structure of objects. You can use the DOM API to manipulate the hierarchy of application objects it encapsulates. The DOM API is ideal for interactive applications because the entire object model is present in memory, where it can be accessed and manipulated by the user. On the other hand, constructing the DOM requires reading the entire XML structure and holding the object tree in memory, so it is much more CPU and memory intensive. javax.xml.transform Defines the XSLT APIs that let you transform XML into other forms. JAXP – other packages

J0 6 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento JAXP in JDK The Java Platform, Standard Edition version 6.0 includes JAXP 1.4. It uses Xerxes 2.7 Xalan 2.6 For info on JAXP 1.4, see

J0 7 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento SAX architecture SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); //optional - default is non-validating SAXParser saxParser = factory.newSAXParser(); saxParser.parse(File f, DefaultHandler-subclass h) File containing input XML Default-handler (classe che implementa le callback) Interfaces implemented by DefaultHandler class wraps

J0 8 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento SAX packages PackageDescription org.xml.sax Defines the SAX interfaces. The name "org.xml" is the package prefix that was settled on by the group that defined the SAX API. org.xml.sax.ext Defines SAX extensions that are used when doing more sophisticated SAX processing, for example, to process a document type definitions (DTD) or to see the detailed syntax for a file. org.xml.sax.hel pers Contains helper classes that make it easier to use SAX -- for example, by defining a default handler that has null-methods for all of the interfaces, so you only need to override the ones you actually want to implement. javax.xml.parse rs Defines the SAXParserFactory class which returns the SAXParser. Also defines exception classes for reporting errors.

J0 9 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento // ContentHandler methods void characters(char[] ch, int start, int length) void startDocument() void startElement(String name, AttributeList attrs) void endElement(String name) void endDocument() void processingInstruction(String target,String data) SAX callbacks

J0 10 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento import java.io.*; import org.xml.sax.*; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; public class CountSax extends DefaultHandler { public static void main(String argv[]) throws Exception { if (argv.length != 1) { System.err.println("Usage: cmd filename"); System.exit(1); } // JAXP methods SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); saxParser.parse(new File(argv[0]), new CountSax()); } SAX example Obtain a SAX parser, Parse the file

J0 11 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento package jaxp_demo; import java.io.*; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; public class Echo01 { public static void main(String argv[]) { if (argv.length != 1) { System.err.println("Usage: cmd filename"); System.exit(1); } new Echo01(argv[0]); } SAX example 1

J0 12 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public Echo01(String filename) { DefaultHandler handler = new MySaxHandler(); // Use the default (non-validating) parser SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse( new File(filename), handler); } catch (Throwable t) { t.printStackTrace(); } System.exit(0); } SAX example 1 Obtain a SAX parser, Parse the file

J0 13 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento package jaxp_demo; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.*; import java.io.*; public class MySaxHandler extends DefaultHandler { int indentCount=0; String indentString=" "; private PrintStream out = System.out; private void emit(String s) { out.print(s); out.flush(); } private void nl() { String lineEnd = System.getProperty("line.separator"); out.print(lineEnd); } private void indent(){ String s=""; for (int i=1;i<=indentCount;i++) s=s+indentString; out.print(s); } SAX example 1 Utility methods

J0 14 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento //========================================================== // SAX DocumentHandler methods //========================================================== public void startDocument() throws SAXException { emit(" "); nl(); } public void endDocument() throws SAXException { nl(); out.flush(); } SAX example 1

J0 15 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public void startElement(String namespaceURI, String lName, // local name String qName, // qualified name Attributes attrs) throws SAXException { String eName = lName; // element name if ("".equals(eName)) eName = qName; indent(); emit("<" + eName); if (attrs != null) { for (int i = 0; i < attrs.getLength(); i++) { String aName = attrs.getLocalName(i); // Attr name if ("".equals(aName)) aName = attrs.getQName(i); emit(" "); emit(aName + "=\"" + attrs.getValue(i) + "\""); } emit(">"); nl(); indentCount++; } SAX example 1

J0 16 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public void endElement(String namespaceURI, String sName, // simple name String qName // qualified name ) throws SAXException { indentCount--; indent(); emit(" "); nl(); } public void characters(char buf[], int offset, int len) throws SAXException { //String s = new String(buf, offset, len); //emit(s); } SAX example 1

J0 17 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento JAXP tutorial /doc/JAXPIntro.html#wp65584 SAX Tutorial /doc/JAXPSAX.html#wp69937 SAX references

J0 18 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento DOM architecture DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(true); // optional – default is non-validating DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(file);

J0 19 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento DOM packages PackageDescription org.w3c.dom Defines the DOM programming interfaces for XML (and, optionally, HTML) documents, as specified by the W3C. javax.xml.parsers Defines the DocumentBuilderFactory class and the DocumentBuilder class, which returns an object that implements the W3C Document interface. The factory that is used to create the builder is determined by the javax.xml.parsers system property, which can be set from the command line or overridden when invoking the newInstance method. This package also defines the ParserConfigurationException class for reporting errors.

J0 20 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public interface Node The Node interface is the primary datatype for the entire DOM. It represents a single node in the document tree. While all objects implementing the Node interface expose methods for dealing with children, not all objects implementing the Node interface may have children. For example, Text nodes may not have children, and adding children to such nodes results in a DOMException being raised. The attributes nodeName, nodeValue and attributes are included as a mechanism to get at node information without casting down to the specific derived interface. In cases where there is no obvious mapping of these attributes for a specific nodeType (e.g., nodeValue for an Element or attributes for a Comment ), this returns null. Note that the specialized interfaces may contain additional and more convenient mechanisms to get and set the relevant information. The Node interface

J0 21 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public interface Document extends Node The Document interface represents the entire HTML or XML document. Conceptually, it is the root of the document tree, and provides the primary access to the document's data. Since elements, text nodes, comments, processing instructions, etc. cannot exist outside the context of a Document, the Document interface also contains the factory methods needed to create these objects. The Node objects created have a ownerDocument attribute which associates them with the Document within whose context they were created. The Document interface

J0 22 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento The Node hierarchy hello mydocument comment Demo Aid=3 hello Document CommentText Entity Attr Node CharacterData

J0 23 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento The Node hierarchy EntityReferenceProcessingInstructionDocumentType DocumentFragment Notation CDATASection Document CommentText Entity Attr Node CharacterData

J0 24 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Node: WARNING! The implied semantic of this model is WRONG! You might deduce that a comment might contain another comment, or a document, or any other node! The integrity is delegated to a series of Nodes attributes, that the programmer should check.

J0 25 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Node: main methods NAVIGATION Node getParentNode() The parent of this node. NodeList getChildNodes() A NodeList that contains all children of this node. Node getFirstChild() The first child of this node. Node getLastChild() The last child of this node. Node getNextSibling() The node immediately following this node. Node getPreviousSibling() The node immediately preceding this node.

J0 26 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento The Node interface InterfacenodeNamenodeValueattributes Attrname of attributevalue of attributenull CDATASection"#cdata-sectioncontent of the CDATA Section null Comment"#commentcontent of the commentnull Document"#documentnull DocumentFragment"#document-fragmentnull DocumentTypedocument type namenull Elementtag namenullNamedNodeMap Entityentity namenull EntityReferencename of entity referenced null Notationnotation namenull ProcessingInstructiontargetentire content excluding the target null Text"#textcontent of the text nodenull

J0 27 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Node: main methods INSPECTION java.lang.String getNodeName() The name of this node, depending on its type; see table. short getNodeType() A code representing the type of the underlying object. java.lang.String getNodeValue() The value of this node, depending on its type; see the table. Document getOwnerDocument() The Document object associated with this node. Boolean hasAttributes() Returns whether this node (if it is an element) has any attributes. Boolean hasChildNodes() Returns whether this node has any children.

J0 28 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Node: main methods EDITING NODES Node cloneNode(boolean deep) Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes. void setNodeValue(java.lang.String nodeValue) The value of this node, depending on its type; see the table.

J0 29 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Node: main methods EDITING STRUCTURE Node appendChild(Node newChild) Adds the node newChild to the end of the list of children of this node. Node removeChild(Node oldChild) Removes the child node indicated by oldChild from the list of children, and returns it. Node replaceChild(Node newChild, Node oldChild) Replaces the child node oldChild with newChild in the list of children, and returns the oldChild node. Node insertBefore(Node newChild, Node refChild) Inserts the node newChild before the existing child node refChild. void normalize() Puts all Text nodes in the full depth of the sub-tree underneath this Node, including attribute nodes, into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separates Text nodes, i.e., there are neither adjacent Text nodes nor empty Text nodes.

J0 30 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento switch (node.getNodeType()) { case Node.ELEMENT_NODE; …; break; case Node.ATTRIBUTE_NODE; …; break; case Node.TEXT_NODE; …; break; case Node.CDATA_SECTION_NODE; …; break; case Node.ENTITY_REFERENCE_NODE; …; break; case Node.PROCESSING_INSTRUCTION; …; break; case Node.COMMENT_NODE; …; break; case Node.DOCUMENT_NODE; …; break; case Node.DOCUMENT_TYPE_NODE; …; break; case Node.DOCUMENT_FRAGMENT_NODE; …; break; case Node.NOTATION_NODE; …; break; default: throw (new Exception()); } NODE: determining the type

J0 31 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento import java.io.*; import org.w3c.dom.*; import org.xml.sax.*; // parser uses SAX methods to build DOM object import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; public class CountDom { public static void main(String[ ] arg) throws Exception { if (arg.length != 1) { System.err.println("Usage: cmd filename (file must exist)"); System.exit(1); } Node node = readFile(new File(arg[0])); System.out.println(arg + " elementCount: " + getElementCount(node)); } DOM example

J0 32 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public static Document readFile(File file) throws Exception { Document doc; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(file); return doc; } catch (SAXParseException ex) { throw (ex); } catch (SAXException ex) { Exception x = ex.getException(); // get underlying Exception throw ((x == null) ? ex : x); } DOM example Parse File, Return Document

J0 33 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento public static int getElementCount(Node node) { if (null == node) return 0; int sum = 0; boolean isElement = (node.getNodeType() == Node.ELEMENT_NODE); if (isElement) sum = 1; NodeList children = node.getChildNodes(); if (null == children) return sum; for (int i = 0; i < children.getLength(); i++) { sum += getElementCount(children.item(i)); // recursive call } return sum; } DOM example use DOM methods to count elements: for each subtree if the root is an Element, set sum to 1, else to 0; add element count of all children of the root to sum

J0 34 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento "Build a better mousetrap, and the world will beat a path to your door." --Emerson Alternatives to DOM

J0 35 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento If you are dealing with simple data structures and if XML Schema isn't a big part of your plans, then you may find that one of the more object-oriented standards, such as JDOM and dom4j, is better suited for your purpose. JDOM: Java DOM (see The standard DOM is a very simple data structure that intermixes text nodes, element nodes, processing instruction nodes, CDATA nodes, entity references, and several other kinds of nodes. That makes it difficult to work with in practice, because you are always sifting through collections of nodes, discarding the ones you don't need into order to process the ones you are interested in. JDOM, on the other hand, creates a tree of objects from an XML structure. The resulting tree is much easier to use, and it can be created from an XML structure without a compilation step. DOM4J: DOM for Java (see dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP. Alternatives to DOM

J0 36 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Using XSLT from Java Transformations

J0 37 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento TrAX TransformerFactory tf = TransformerFactory.newInstance(); StreamSource xslSS=new StreamSource(source.xsl); StreamSource xmlSS=new StreamSource(source.xml); Transformer t=tf.newTrasformer(xslSS); t.transform(xmlSS,new StreamResult(new FileOutputStream(out.html); java –Djavax.xml.transform.TransformerFactory= org.apache.xalan.processor.TrasformerFactoryImpl MyClass

J0 38 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento xml.transform packages PackageDescription javax.xml.transfo rm Defines the TransformerFactory and Transformer classes, which you use to get a object capable of doing transformations. After creating a transformer object, you invoke its transform() method, providing it with an input (source) and output (result). javax.xml.transfo rm.dom Classes to create input (source) and output (result) objects from a DOM. javax.xml.transfo rm.sax Classes to create input (source) from a SAX parser and output (result) objects from a SAX event handler. javax.xml.transfo rm.stream Classes to create input (source) and output (result) objects from an I/O stream.

J0 39 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento javax.xml.transform.Transformer transform(Source xmls, Result output) javax.xml.transform.sax.SAXResult implements Result javax.xml.transform.sax.SAXSource implements Source javax.xml.transform.stream.StreamResult implements Result javax.xml.transform.stream.StreamSource implements Source javax.xml.transform.dom.DOMResult implements Result javax.xml.transform. dom.DOMSource implements Source TrAX main classes

J0 40 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Java Architecture for XML Binding (JAXB) provides a convenient way to bind an XML schema to a representation in Java code. See also: JAX-WS JAX-SWA JAX- RPC SAAJ XML –Digital Signatures ecc. Other Java-XML APIs