Java XML Tutorial PDF
Java XML Tutorial PDF
JAVA provides excellent support and a rich set of libraries to parse, modify or inquire
XML documents.
This tutorial will teach you basic XML concepts and the usage of various types of Java
based XML parsers in a simple and intuitive way.
Audience
This tutorial has been prepared for beginners to help them understand the basic-to-
advanced concepts related to XML parsing using Java Programming language.
After completing this tutorial, you will find yourself at a moderate level of expertise in
XML parsing using Java from where you can take yourself to higher levels of expertise.
Prerequisites
Knowledge of computers is not a prerequisite to follow the contents of this tutorial. This
tutorial assumes no background in computers or computer programming, though basic
knowledge of computer terminologies will help in understanding the given concepts very
easily.
All the content and graphics published in this e-book are the property of Tutorials Point
(I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or
republish any contents or a part of contents of this e-book in any manner without written
consent of the publisher.
We strive to update the contents of our website and tutorials as timely and as precisely
as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I)
Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness or completeness of
our website or its contents including this tutorial. If you discover any errors on our
website or in this tutorial, please notify us at contact@tutorialspoint.com
1
Java XML
Table of Contents
About the Tutorial ........................................................................................................................................... 1
Audience .......................................................................................................................................................... 1
Prerequisites .................................................................................................................................................... 1
Disclaimer & Copyright .................................................................................................................................... 1
Table of Contents ............................................................................................................................................ 2
2
Java XML
3
Java XML
4
1. Java XML Overview Java XML
What is XML?
XML is a simple text-based language which was designed to store and transport data in
plain text format. It stands for Extensible Markup Language. Following are some of the
salient features of XML.
You can define your own tags which is why it is called extensible language.
Example
<?xml version="1.0"?>
<Class>
<Name>First</Name>
<Sections>
<Section>
<Name>A</Name>
<Students>
<Student>Rohan</Student>
<Student>Mohan</Student>
<Student>Sohan</Student>
<Student>Lalit</Student>
<Student>Vinay</Student>
</Students>
</Section>
<Section>
<Name>B</Name>
<Students>
<Student>Robert</Student>
<Student>Julie</Student>
5
Java XML
<Student>Kalie</Student>
<Student>Michael</Student>
</Students>
</Section>
</Sections>
</Class>
Advantages
Following are the advantages that XML provides:
Human readable - XML uses simple text format. It is human readable and
understandable.
Extensible - In XML, custom tags can be created and used very easily.
Allow Validation - Using XSD, DTD and XML structures can be validated easily.
Disadvantages
Following are the disadvantages of using XML:
Verbose - Being a verbose language, XML file size increases the transmission
and storage costs.
6
2. Java XML Parsers Java XML
XML Parsing refers to going through an XML document in order to access or modify data.
Dom Parser - Parses an XML document by loading the complete contents of the
document and creating its complete hierarchical tree in memory.
SAX Parser - Parses an XML document on event-based triggers. Does not load
the complete document into the memory.
JDOM Parser - Parses an XML document in a similar fashion to DOM parser but
in an easier way.
StAX Parser - Parses an XML document in a similar fashion to SAX parser but in
a more efficient way.
DOM4J Parser - A java library to parse XML, XPath, and XSLT using Java
Collections Framework. It provides support for DOM, SAX, and JAXP.
There are JAXB and XSLT APIs available to handle XML parsing in object-oriented way.
We'll elaborate each parser in detail in the subsequent chapters of this tutorial.
7
Java XML
8
3. Java DOM Parser Overview Java XML
The Document Object Model (DOM) is an official recommendation of the World Wide Web
Consortium (W3C). It defines an interface that enables programs to access and update
the style, structure, and contents of XML documents. XML parsers that support DOM
implement this interface.
When to Use?
You should use a DOM parser when:
You need to move parts of an XML document around (you might want to sort
certain elements, for example).
You need to use the information in an XML document more than once.
Advantages
The DOM is a common interface for manipulating document structures. One of its design
goals is that Java code written for one DOM-compliant parser should run on any other
DOM-compliant parser without having to do any modifications.
DOM Interfaces
The DOM defines several Java interfaces. Here are the most common interfaces:
Element - The vast majority of the objects you'll deal with are Elements.
9
Java XML
10
4. Java DOM Parser Parse XML Document Java XML
Create a SAXBuilder.
Examine attributes.
Examine sub-elements.
Create a DocumentBuilder
SAXBuilder saxBuilder = new SAXBuilder();
Examine attributes
//returns specific attribute
getAttribute("attributeName");
Examine sub-elements
11
Java XML
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
DomParserDemo.java
12
Java XML
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
13
Java XML
14
Java XML
15
5. Java JDOM Parser Query XML Document Java XML
Demo Example
Here is the input XML file that we need to query:
<?xml version="1.0"?>
<cars>
<supercars company="Ferrari">
<carname type="formula one">Ferarri 101</carname>
<carname type="sports car">Ferarri 201</carname>
<carname type="sports car">Ferarri 301</carname>
</supercars>
<supercars company="Lamborgini">
<carname>Lamborgini 001</carname>
<carname>Lamborgini 002</carname>
<carname>Lamborgini 003</carname>
</supercars>
<luxurycars company="Benteley">
<carname>Benteley 1</carname>
<carname>Benteley 2</carname>
<carname>Benteley 3</carname>
</luxurycars>
</cars>
QueryXmlFileDemo.java
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
16
Java XML
17
Java XML
else{
System.out.println("");
}
}
}
}catch(JDOMException e){
e.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
18
6. Java JDOM Parser Create XML Document Java XML
Demo Example
Here is the XML we need to create:
CreateXmlFileDemo.java
import java.io.IOException;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
try{
//root element
Element carsElement = new Element("cars");
Document doc = new Document(carsElement);
//supercars element
Element supercarElement = new Element("supercars");
19
Java XML
supercarElement.setAttribute(new Attribute("company","Ferrari"));
//supercars element
Element carElement1 = new Element("carname");
carElement1.setAttribute(new Attribute("type","formula one"));
carElement1.setText("Ferrari 101");
supercarElement.addContent(carElement1);
supercarElement.addContent(carElement2);
doc.getRootElement().addContent(supercarElement);
// display ml
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, System.out);
}catch(IOException e){
e.printStackTrace();
}
}
}
20
7. Java JDOM Parser Modify XML Document Java XML
Demo Example
Here is the input text file we need to modify:
ModifyXmlFileDemo.java
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
21
Java XML
try {
File inputFile = new File("input.txt");
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(inputFile);
Element rootElement = document.getRootElement();
22
Java XML
// display xml
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(document, System.out);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
23
Java XML
24
8. Java SAX Parser Overview Java XML
SAX (Simple API for XML) is an event-based parser for XML documents. Unlike a DOM
parser, a SAX parser creates no parse tree. SAX is a streaming interface for XML, which
means that applications using SAX receive event notifications about the XML document
being processed an element, and attribute, at a time in sequential order starting at the
top of the document, and ending with the closing of the ROOT element.
Reads an XML document from top to bottom, recognizing the tokens that make
up a well-formed XML document.
Tokens are processed in the same order that they appear in the document.
Reports the application program the nature of tokens that the parser has
encountered as they occur.
The application program provides an "event" handler that must be registered with
the parser.
As the tokens are identified, callback methods in the handler are invoked with the
relevant information.
When to Use?
You should use a SAX parser when:
You can process the XML document in a linear fashion from top to down.
You are processing a very large XML document whose DOM tree would consume
too much memory. Typical DOM implementations use ten bytes of memory to
represent one byte of XML.
Data is available as soon as it is seen by the parser, so SAX works well for an
XML document that arrives over a stream.
Disadvantages of SAX
We have no random access to an XML document since it is processed in a
forward-only manner.
If you need to keep track of data that the parser has seen or change the order of
items, you must write the code and store the data on your own.
25
Java XML
ContentHandler Interface
This interface specifies the callback methods that the SAX parser uses to notify an
application program of the components of the XML document that it has seen.
void characters(char[] ch, int start, int length) - Called when character data
is encountered.
void ignorableWhitespace( char[] ch, int start, int length) - Called when a
DTD is present and ignorable whitespace is encountered.
Attributes Interface
This interface specifies methods for processing the attributes connected to an element.
26
9. Java SAX Parser - Parse XML Document Java XML
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
UserHandler.java
package com.tutorialspoint.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
27
Java XML
@Override
public void startElement(String uri,
String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("student")) {
String rollNo = attributes.getValue("rollno");
System.out.println("Roll No : " + rollNo);
} else if (qName.equalsIgnoreCase("firstname")) {
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
bMarks = true;
}
}
@Override
public void endElement(String uri,
String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("student")) {
System.out.println("End Element :" + qName);
}
}
@Override
28
Java XML
SAXParserDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
29
Java XML
try {
File inputFile = new File("input.txt");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
UserHandler userhandler = new UserHandler();
saxParser.parse(inputFile, userhandler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void startElement(String uri,
String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("student")) {
String rollNo = attributes.getValue("rollno");
System.out.println("Roll No : " + rollNo);
} else if (qName.equalsIgnoreCase("firstname")) {
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
30
Java XML
bMarks = true;
}
}
@Override
public void endElement(String uri,
String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("student")) {
System.out.println("End Element :" + qName);
}
}
@Override
public void characters(char ch[],
int start, int length) throws SAXException {
if (bFirstName) {
System.out.println("First Name: "
+ new String(ch, start, length));
bFirstName = false;
} else if (bLastName) {
System.out.println("Last Name: "
+ new String(ch, start, length));
bLastName = false;
} else if (bNickName) {
System.out.println("Nick Name: "
+ new String(ch, start, length));
bNickName = false;
} else if (bMarks) {
System.out.println("Marks: "
+ new String(ch, start, length));
bMarks = false;
}
}
}
31
Java XML
Roll No : 393
First Name: dinkar
Last Name: kad
Nick Name: dinkar
Marks: 85
End Element :student
Roll No : 493
First Name: Vaneet
Last Name: Gupta
Nick Name: vinni
Marks: 95
End Element :student
Roll No : 593
First Name: jasvir
Last Name: singn
Nick Name: jazz
Marks: 90
End Element :student
32
10. Java SAX Parser Query XML Document Java XML
Demo Example
Here is the input text file that we need to Query for rollno: 393
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
UserHandler.java
package com.tutorialspoint.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
33
Java XML
@Override
public void startElement(String uri,
String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("student")) {
rollNo = attributes.getValue("rollno");
}
if(("393").equals(rollNo) &&
qName.equalsIgnoreCase("student")){
System.out.println("Start Element :" + qName);
}
if (qName.equalsIgnoreCase("firstname")) {
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
bMarks = true;
}
}
@Override
34
Java XML
@Override
public void characters(char ch[],
int start, int length) throws SAXException {
SAXQueryDemo.java
35
Java XML
package com.tutorialspoint.xml;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
try {
File inputFile = new File("input.txt");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
UserHandler userhandler = new UserHandler();
saxParser.parse(inputFile, userhandler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
36
Java XML
if (qName.equalsIgnoreCase("student")) {
rollNo = attributes.getValue("rollno");
}
if(("393").equals(rollNo) &&
qName.equalsIgnoreCase("student")){
System.out.println("Start Element :" + qName);
}
if (qName.equalsIgnoreCase("firstname")) {
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
bMarks = true;
}
}
@Override
public void endElement(String uri,
String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("student")) {
if(("393").equals(rollNo)
&& qName.equalsIgnoreCase("student"))
System.out.println("End Element :" + qName);
}
}
@Override
37
Java XML
38
11. Java SAX Parser Create XML Document Java XML
It is better to use StAX parser for creating XML documents rather than using
SAX parser. Please refer the Java StAX Parser section for the same.
39
12. Java SAX Parser Modify XML Document Java XML
Demo Example
Here is the input XML file that we need to modify by appending <Result>Pass<Result/>
at the end of </marks> tag.
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
SAXModifyDemo.java
package com.tutorialspoint.xml;
import java.io.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
40
Java XML
import org.xml.sax.helpers.DefaultHandler;
try {
File inputFile = new File("input.txt");
SAXParserFactory factory =
SAXParserFactory.newInstance();
SAXModifyDemo obj = new SAXModifyDemo();
obj.childLoop(inputFile);
FileWriter filewriter = new FileWriter("newfile.xml");
for(int loopIndex = 0; loopIndex < numberLines; loopIndex++){
filewriter.write(displayText[loopIndex].toCharArray());
filewriter.write('\n');
System.out.println(displayText[loopIndex].toString());
}
filewriter.close();
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
41
Java XML
displayText[numberLines] += '<';
displayText[numberLines] += qualifiedName;
if (attributes != null) {
int numberAttributes = attributes.getLength();
for (int loopIndex = 0; loopIndex < numberAttributes;
loopIndex++){
displayText[numberLines] += ' ';
42
Java XML
displayText[numberLines] += attributes.getQName(loopIndex);
displayText[numberLines] += "=\"";
displayText[numberLines] += attributes.getValue(loopIndex);
displayText[numberLines] += '"';
}
}
displayText[numberLines] += '>';
numberLines++;
}
if (qualifiedName.equals("marks")) {
startElement("", "Result", "Result", null);
characters("Pass".toCharArray(), 0, "Pass".length());
endElement("", "Result", "Result");
}
}
43
Java XML
44
Java XML
<Result>
Pass
</Result>
</student>
<student rollno="593">
<firstname>
jasvir
</firstname>
<lastname>
singn
</lastname>
<nickname>
jazz
</nickname>
<marks>
90
</marks>
<Result>
Pass
</Result>
</student>
</class>
45
Java XML
46
13. Java DOM Parser Overview Java XML
JDOM works with DOM and SAX APIs and combines the best of the two. It is of low
memory footprint and is nearly as fast as SAX.
Environment Setup
In order to use JDOM parser, you should have jdom.jar in your application's classpath.
Download jdom-2.0.5.zip.
When to Use?
You should use a JDOM parser when:
You need to move parts of an XMl document around (you might want to sort
certain elements, for example).
You need to use the information in an XML document more than once.
You are a Java developer and want to leverage Java optimized parsing of XML.
JDOM provides a variety of utility functions that you can use to examine the contents
and structure of an XML document in case the document is well structured and its
structure is known.
Advantages
JDOM provides Java developers the flexibility and easy maintainablity of XML parsing
code. It is a lightweight and quick API.
JDOM Classes
JDOM defines several Java classes. Here are the most common classes:
47
Java XML
Node.getChildren(Name) - Get all the direct child nodes with a given name.
Node.getChild(Name) - Get the first child node with the given name.
48
14. Java DOM Parser Parse XML Document Java XML
Create a SAXBuilder.
Examine attributes.
Examine sub-elements.
Create a DocumentBuilder
SAXBuilder saxBuilder = new SAXBuilder();
Examine attributes
//returns specific attribute
getAttribute("attributeName");
49
Java XML
Examine sub-elements
//returns a list of subelements of specified name
getChildren("subelementName");
//returns a list of all child nodes
getChildren();
//returns first child node
getChild("subelementName");
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
50
Java XML
DomParserDemo.java
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
51
Java XML
+ attribute.getValue() );
System.out.println("First Name : " +
student.getChild("firstname").getText());
System.out.println("Last Name : "+
student.getChild("lastname").getText());
System.out.println("Nick Name : "+
student.getChild("nickname").getText());
System.out.println("Marks : "+
student.getChild("marks").getText());
}
}catch(JDOMException e){
e.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
52
Java XML
53
15. Java DOM Parser Query XML Document Java XML
Demo Example
Here is the input XML file that we need to query:
<?xml version="1.0"?>
<cars>
<supercars company="Ferrari">
<carname type="formula one">Ferarri 101</carname>
<carname type="sports car">Ferarri 201</carname>
<carname type="sports car">Ferarri 301</carname>
</supercars>
<supercars company="Lamborgini">
<carname>Lamborgini 001</carname>
<carname>Lamborgini 002</carname>
<carname>Lamborgini 003</carname>
</supercars>
<luxurycars company="Benteley">
<carname>Benteley 1</carname>
<carname>Benteley 2</carname>
<carname>Benteley 3</carname>
</luxurycars>
</cars>
QueryXmlFileDemo.java
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
54
Java XML
55
Java XML
else{
System.out.println("");
}
}
}
}catch(JDOMException e){
e.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
56
16. Java DOM Parser Create XML Document Java XML
Demo Example
Here is the XML file that we need to create:
CreateXmlFileDemo.java
import java.io.IOException;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
try{
//root element
Element carsElement = new Element("cars");
Document doc = new Document(carsElement);
//supercars element
Element supercarElement = new Element("supercars");
57
Java XML
supercarElement.setAttribute(new Attribute("company","Ferrari"));
//supercars element
Element carElement1 = new Element("carname");
carElement1.setAttribute(new Attribute("type","formula one"));
carElement1.setText("Ferrari 101");
supercarElement.addContent(carElement1);
supercarElement.addContent(carElement2);
doc.getRootElement().addContent(supercarElement);
// display ml
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, System.out);
}catch(IOException e){
e.printStackTrace();
}
}
}
58
17. Java DOM Parser Modify XML Document Java XML
Demo Example
Here is the input text file that we need to modify:
ModifyXmlFileDemo.java
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
59
Java XML
60
Java XML
// display xml
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(document, System.out);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
61
Java XML
62
18. Java StAX Parser Overview Java XML
StAX is a Java-based API to parse XML document in a similar way as SAX parser does.
But there are two major difference between the two APIs:
StAX is a PULL API, whereas SAX is a PUSH API. It means in case of StAX parser,
a client application needs to ask the StAX parser to get information from XML
whenever it needs. But in case of SAX parser, a client application is required to
get information when SAX parser notifies the client application that information is
available.
StAX API can read as well as write XML documents. Using SAX API, an XML file
can only be read.
Environment Setup
In order to use StAX parser, you should have stax.jar in your application's classpath.
Download stax-1.2.0.jar.
Reads an XML document from top to bottom, recognizing the tokens that make
up a well-formed XML document.
Tokens are processed in the same order that they appear in the document.
Reports the application program the nature of tokens that the parser has
encountered as they occur.
The application program provides an "event" reader which acts as an iterator and
iterates over the event to get the required information. Another reader available
is "cursor" which acts as a pointer to XML nodes.
As the events are identified, XML elements can be retrieved from the event object
and can be processed further.
When to use?
You should use a StAX parser when:
You can process the XML document in a linear fashion from top to down.
You are processing a very large XML document whose DOM tree would consume
too much memory. Typical DOM implementations use ten bytes of memory to
represent one byte of XML.
Data is available as soon as it is seen by the parser, so StAX works well for an
XML document that arrives over a stream.
63
Java XML
Disadvantages of SAX
We have no random access to an XML document, since it is processed in a
forward-only manner.
If you need to keep track of data that the parser has seen or where the parser
has changed the order of items, then you must write the code and store the data
on your own.
XMLEventReader Class
This class provides iterator of events which can be used to iterate over events as they
occur while parsing an XML document.
XMLEventWriter Class
This interface specifies methods for creating an event.
XMLStreamReader Class
This class provides iterator of events which can be used to iterate over events as they
occur while parsing an XML document.
XMLStreamWriter Class
This interface specifies methods for creating an event.
64
19. Java StAX Parser Parse XML Document Java XML
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
StAXParserDemo.java
package com.tutorialspoint.xml;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Iterator;
65
Java XML
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
while(eventReader.hasNext()){
XMLEvent event = eventReader.nextEvent();
switch(event.getEventType()){
case XMLStreamConstants.START_ELEMENT:
StartElement startElement = event.asStartElement();
String qName = startElement.getName().getLocalPart();
if (qName.equalsIgnoreCase("student")) {
System.out.println("Start Element : student");
Iterator<Attribute> attributes =
startElement.getAttributes();
String rollNo = attributes.next().getValue();
System.out.println("Roll No : " + rollNo);
} else if (qName.equalsIgnoreCase("firstname")) {
66
Java XML
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
bMarks = true;
}
break;
case XMLStreamConstants.CHARACTERS:
Characters characters = event.asCharacters();
if(bFirstName){
System.out.println("First Name: "
+ characters.getData());
bFirstName = false;
}
if(bLastName){
System.out.println("Last Name: "
+ characters.getData());
bLastName = false;
}
if(bNickName){
System.out.println("Nick Name: "
+ characters.getData());
bNickName = false;
}
if(bMarks){
System.out.println("Marks: "
+ characters.getData());
bMarks = false;
}
break;
case XMLStreamConstants.END_ELEMENT:
EndElement endElement = event.asEndElement();
67
Java XML
if(endElement.getName().getLocalPart().equalsIgnoreCase("student")){
System.out.println("End Element : student");
System.out.println();
}
break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
68
Java XML
69
20. Java StAX Parser Query XML Document Java XML
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
StAXParserDemo.java
package com.tutorialspoint.xml;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Iterator;
70
Java XML
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
71
Java XML
72
Java XML
}
break;
case XMLStreamConstants.END_ELEMENT:
EndElement endElement = event.asEndElement();
if(endElement.getName().getLocalPart().equalsIgnoreCase("student") &&
isRequestRollNo){
System.out.println("End Element : student");
System.out.println();
isRequestRollNo = false;
}
break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
73
21. Java StAX Parser Create XML Document Java XML
Demo Example
Here is the XML that we need to create:
StAXCreateXMLDemo.java
package com.tutorialspoint.xml;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
xMLStreamWriter.writeStartDocument();
xMLStreamWriter.writeStartElement("cars");
xMLStreamWriter.writeStartElement("supercars");
74
Java XML
xMLStreamWriter.writeAttribute("company", "Ferrari");
xMLStreamWriter.writeStartElement("carname");
xMLStreamWriter.writeAttribute("type", "formula one");
xMLStreamWriter.writeCharacters("Ferrari 101");
xMLStreamWriter.writeEndElement();
xMLStreamWriter.writeStartElement("carname");
xMLStreamWriter.writeAttribute("type", "sports");
xMLStreamWriter.writeCharacters("Ferrari 202");
xMLStreamWriter.writeEndElement();
xMLStreamWriter.writeEndElement();
xMLStreamWriter.writeEndDocument();
xMLStreamWriter.flush();
xMLStreamWriter.close();
stringWriter.close();
System.out.println(xmlString);
} catch (XMLStreamException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
76
22. Java StAX Parser Modify XML DocumentJava XML
Demo Example
Here is the XML that we need to modify:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singh</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
StAXModifyDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
77
Java XML
import java.util.Iterator;
import java.util.List;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
try {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader =
factory.createXMLEventReader(
new FileReader("input.txt"));
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(new File("input.txt"));
Element rootElement = document.getRootElement();
List<Element> studentElements = rootElement.getChildren("student");
while(eventReader.hasNext()){
XMLEvent event = eventReader.nextEvent();
switch(event.getEventType()){
case XMLStreamConstants.START_ELEMENT:
StartElement startElement = event.asStartElement();
78
Java XML
if (qName.equalsIgnoreCase("student")) {
Iterator<Attribute> attributes =
startElement.getAttributes();
String rollNo = attributes.next().getValue();
if(rollNo.equalsIgnoreCase("393")){
//get the student with roll no 393
for(int i=0;i < studentElements.size();i++){
Element studentElement = studentElements.get(i);
if(studentElement.getAttribute("rollno").getValue().equalsIgnoreCase("393")){
studentElement.removeChild("marks");
studentElement.addContent(new
Element("marks").setText("80"));
}
}
}
}
break;
}
}
XMLOutputter xmlOutput = new XMLOutputter();
// display xml
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(document, System.out);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
79
Java XML
}
}
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>80</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singh</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
80
Java XML
81
23. Java XPath Parser Overview Java XML
What is XPath?
Structure Definations - XPath defines the parts of an XML document like
element, attribute, text, namespace, processing-instruction, comment, and
document nodes.
Major part of XSLT - XPath is one of the major elements in XSLT standard and
one must have sufficient knowledge of XPath in order to work with XSLT
documents.
XPath Expressions
XPath uses a path expression to select node or list of nodes from an XML document.
Following is a list of useful paths and expression to select any node/list of nodes from an
XML document.
Expression Description
// Selection starts from the current node that match the selection
@ Selects attributes
82
Java XML
class/student Example: Selects all student elements that are children of class
//student Selects all student elements, no matter where they are in the
document
Predicates
Predicates are used to find specific node or a node containing specific value and are
defined using [...].
Expression Result
/class/student[1] Selects the first student element that is the child of the
class element.
/class/student[last()] Selects the last student element that is the child of the
class element.
/class/student[last()-1] Selects the last but one student element that is the child of
the class element.
83
24. Java XPath Parser Parse XML Document Java XML
Create a DocumentBuilder.
Compile the XPath expression using XPath.compile() and get a list of nodes by
evaluating the compiled expression via XPath.evaluate().
Examine attributes.
Examine sub-elements.
Create a DocumentBuilder
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
84
Java XML
Build XPath
XPath xPath = XPathFactory.newInstance().newXPath();
Examine attributes
//returns specific attribute
getAttribute("attributeName");
//returns a Map (table) of names/values
getAttributes();
Examine sub-elements
//returns a list of subelements of specified name
getElementsByTagName("subelementName");
//returns a list of all child nodes
getChildNodes();
Demo Example
Here is the input text file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
85
Java XML
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singh</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
XPathParserDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
86
Java XML
import org.xml.sax.SAXException;
dBuilder = dbFactory.newDocumentBuilder();
87
Java XML
.getElementsByTagName("lastname")
.item(0)
.getTextContent());
System.out.println("Nick Name : "
+ eElement
.getElementsByTagName("nickname")
.item(0)
.getTextContent());
System.out.println("Marks : "
+ eElement
.getElementsByTagName("marks")
.item(0)
.getTextContent());
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}
}
88
Java XML
89
25. Java XPath Parser Query XML Document Java XML
Demo Example
Here is the input text file that we need to query:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
XPathParserDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
90
Java XML
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
dBuilder = dbFactory.newDocumentBuilder();
91
Java XML
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
92
Java XML
}
}
93
26. Java XPath Parser Create XML Document Java XML
XPath parser is used to navigate XML Documents only. It is better to use DOM
parser for creating XML. Please refer the Java DOM Parser section for the same.
94
27. Java XPath Parser Modify XML Document Java XML
XPath parser is used to navigate XML Documents only. It is better to use DOM
parser for modifying XML. Please refer the Java DOM Parser section for the
same.
95
Java XML
96
28. Java DOM4J Parser Overview Java XML
DOM4J works with DOM, SAX, XPath, and XSLT. It can parse large XML documents with
very low memory footprint.
Environment Setup
In order to use DOM4J parser, you should have dom4j-1.6.1.jar and jaxen.jar in your
application's classpath. Download dom4j-1.6.1.zip.
When to Use?
You should use a DOM4J parser when:
You need to move parts of an XML document around (you might want to sort
certain elements, for example).
You need to use the information in an XML document more than once.
You are a Java developer and want to leverage Java-optimized parsing of XML.
DOM4J provides a variety of utility functions that you can use to examine the contents
and structure of an XML document in case the document is well structured and its
structure is known.
Advantages
DOM4J provides Java developers the flexibility and easy maintainablity of XML parsing
code. It is a lightweight and quick API.
97
Java XML
DOM4J Classes
DOM4J defines several Java classes. Here are the most common classes:
98
29. Java DOM4J Parser Parse XML Document Java XML
Create a SAXReader.
Examine attributes.
Examine sub-elements.
Create a DocumentBuilder
SAXBuilder saxBuilder = new SAXBuilder();
99
Java XML
Examine attributes
//returns specific attribute
valueOf("@attributeName");
Examine sub-elements
//returns first child node
selectSingleNode("subelementName");
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
100
Java XML
DOM4JParserDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
101
Java XML
102
30. Java DOM4J Parser Query XML Document Java XML
Demo Example
Here is the input XML file that we need to parse:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
DOM4JQueryDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
103
Java XML
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
List<Node> nodes =
document.selectNodes("/class/student[@rollno='493']" );
System.out.println("----------------------------");
for (Node node : nodes) {
System.out.println("\nCurrent Element :"
+ node.getName());
System.out.println("Student roll no : "
+ node.valueOf("@rollno") );
System.out.println("First Name : " +
node.selectSingleNode("firstname").getText());
System.out.println("Last Name : " +
node.selectSingleNode("lastname").getText());
System.out.println("First Name : " +
node.selectSingleNode("nickname").getText());
System.out.println("Marks : " +
node.selectSingleNode("marks").getText());
}
} catch (DocumentException e) {
e.printStackTrace();
}
104
Java XML
}
}
105
31. Java DOM4J Parser Create XML Document Java XML
Demo Example
Here is the XML that we need to create:
CreateXmlFileDemo.java
package com.tutorialspoint.xml;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
supercarElement.addElement("carname")
106
Java XML
supercarElement.addElement("carname")
.addAttribute("type", "sports")
.addText("Ferrari 202");
107
32. Java DOM4J Parser Modify XML Document Java XML
Demo Example
Here is the XML that we need to modify:
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
DOM4jModifyXMLDemo.java
package com.tutorialspoint.xml;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
108
Java XML
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
List<Node> nodes =
document.selectNodes("/class/student[@rollno='493']" );
for (Node node : nodes) {
Element element = (Element)node;
Iterator<Element> iterator=element.elementIterator("marks");
while(iterator.hasNext()){
Element marksElement=(Element)iterator.next();
marksElement.setText("80");
}
}
109
Java XML
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
110