XML libraries support (#463)

* dom4j

* added more parsers

* StaxParser

* Jaxb binding

* Jaxb binding

* Finish article
This commit is contained in:
Raquel Garrido 2016-06-26 11:55:42 +02:00 committed by Grzegorz Piwowarek
parent a661e0e3c9
commit 330c8680c9
20 changed files with 957 additions and 143 deletions

View File

@ -1,139 +1,117 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung</groupId> <groupId>com.baeldung</groupId>
<artifactId>xml</artifactId> <artifactId>xml</artifactId>
<version>0.1-SNAPSHOT</version> <version>0.1-SNAPSHOT</version>
<name>xml</name> <name>xml</name>
<dependencies> <dependencies>
<!-- utils --> <!-- xml libraries -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>org.jdom</groupId>
<artifactId>commons-io</artifactId> <artifactId>jdom2</artifactId>
<version>2.4</version> <version>2.0.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>xerces</groupId>
<artifactId>commons-collections4</artifactId> <artifactId>xercesImpl</artifactId>
<version>4.0</version> <version>2.9.1</version>
</dependency> </dependency>
<dependency> <!-- utils -->
<groupId>org.apache.commons</groupId> <dependency>
<artifactId>commons-lang3</artifactId> <groupId>commons-io</groupId>
<version>${commons-lang3.version}</version> <artifactId>commons-io</artifactId>
</dependency> <version>2.4</version>
</dependency>
<!-- test scoped -->
<dependency> <dependency>
<groupId>junit</groupId> <groupId>org.apache.commons</groupId>
<artifactId>junit</artifactId> <artifactId>commons-collections4</artifactId>
<version>${junit.version}</version> <version>4.0</version>
<scope>test</scope> </dependency>
</dependency>
<dependency> <dependency>
<groupId>org.hamcrest</groupId> <groupId>org.apache.commons</groupId>
<artifactId>hamcrest-core</artifactId> <artifactId>commons-lang3</artifactId>
<version>${org.hamcrest.version}</version> <version>${commons-lang3.version}</version>
<scope>test</scope> </dependency>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>${org.hamcrest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
</dependencies> <!-- test scoped -->
<build> <dependency>
<finalName>xml</finalName> <groupId>junit</groupId>
<resources> <artifactId>junit</artifactId>
<resource> <version>${junit.version}</version>
<directory>src/main/resources</directory> <scope>test</scope>
<filtering>true</filtering> </dependency>
</resource>
</resources>
<plugins> </dependencies>
<plugin> <build>
<groupId>org.apache.maven.plugins</groupId> <finalName>xml</finalName>
<artifactId>maven-compiler-plugin</artifactId> <resources>
<version>${maven-compiler-plugin.version}</version> <resource>
<configuration> <directory>src/main/resources</directory>
<source>1.8</source> <filtering>true</filtering>
<target>1.8</target> </resource>
</configuration> </resources>
</plugin>
<plugin> <plugins>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
</plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</build> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<properties> </plugins>
<!-- persistence -->
<hibernate.version>4.3.11.Final</hibernate.version>
<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
<!-- marshalling --> </build>
<jackson.version>2.7.2</jackson.version>
<!-- logging --> <properties>
<org.slf4j.version>1.7.13</org.slf4j.version>
<logback.version>1.1.3</logback.version>
<!-- various --> <!-- util -->
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version> <guava.version>19.0</guava.version>
<commons-lang3.version>3.4</commons-lang3.version>
<!-- util --> <!-- testing -->
<guava.version>19.0</guava.version> <junit.version>4.12</junit.version>
<commons-lang3.version>3.4</commons-lang3.version>
<!-- testing --> <!-- maven plugins -->
<org.hamcrest.version>1.3</org.hamcrest.version> <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
<junit.version>4.12</junit.version> <maven-war-plugin.version>2.6</maven-war-plugin.version>
<mockito.version>1.10.19</mockito.version> <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
<httpcore.version>4.4.1</httpcore.version> </properties>
<httpclient.version>4.5</httpclient.version>
<rest-assured.version>2.9.0</rest-assured.version>
<!-- maven plugins -->
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
<maven-war-plugin.version>2.6</maven-war-plugin.version>
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
</properties>
</project> </project>

View File

@ -39,7 +39,7 @@ public class DefaultParser {
XPath xPath = XPathFactory.newInstance().newXPath(); XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "/Tutorials/Tutorial"; String expression = "/tutorials/tutorial";
nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
@ -60,7 +60,7 @@ public class DefaultParser {
XPath xPath = XPathFactory.newInstance().newXPath(); XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "/Tutorials/Tutorial[@tutId=" + "'" + id + "'" + "]"; String expression = "/tutorials/tutorial[@tutId=" + "'" + id + "'" + "]";
node = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE); node = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
@ -83,7 +83,7 @@ public class DefaultParser {
XPath xPath = XPathFactory.newInstance().newXPath(); XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//Tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"; String expression = "//tutorial[descendant::title[text()=" + "'" + name + "'" + "]]";
nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
@ -107,7 +107,7 @@ public class DefaultParser {
XPath xPath = XPathFactory.newInstance().newXPath(); XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//Tutorial[number(translate(date, '/', '')) > " + date + "]"; String expression = "//tutorial[number(translate(date, '/', '')) > " + date + "]";
nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
@ -151,7 +151,7 @@ public class DefaultParser {
} }
}); });
String expression = "/bdn:Tutorials/bdn:Tutorial"; String expression = "/bdn:tutorials/bdn:tutorial";
nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);

View File

@ -0,0 +1,131 @@
package com.baeldung.xml;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4JParser {
private File file;
public Dom4JParser(File file) {
this.file = file;
}
public Element getRootElement() {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(file);
return document.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
public List<Element> getFirstElementList() {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(file);
return document.getRootElement().elements();
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
public Node getNodeById(String id) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(file);
List<Node> elements = document.selectNodes("//*[@tutId='" + id + "']");
return elements.get(0);
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
public Node getElementsListByTitle(String name) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(file);
List<Node> elements = document
.selectNodes("//tutorial[descendant::title[text()=" + "'" + name + "'" + "]]");
return elements.get(0);
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
public void generateModifiedDocument() {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(file);
List<Node> nodes = document.selectNodes("/tutorials/tutorial");
for (Node node : nodes) {
Element element = (Element) node;
Iterator<Element> iterator = element.elementIterator("title");
while (iterator.hasNext()) {
Element title = (Element) iterator.next();
title.setText(title.getText() + " updated");
}
}
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/test/resources/example_updated.xml")));
writer.write(document);
writer.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void generateNewDocument() {
try {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("XMLTutorials");
Element tutorialElement = root.addElement("tutorial").addAttribute("tutId", "01");
tutorialElement.addAttribute("type", "xml");
tutorialElement.addElement("title").addText("XML with Dom4J");
tutorialElement.addElement("description").addText("XML handling with Dom4J");
tutorialElement.addElement("date").addText("14/06/2016");
tutorialElement.addElement("author").addText("Dom4J tech writer");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/test/resources/example_new.xml")), format);
writer.write(document);
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}

View File

@ -0,0 +1,62 @@
package com.baeldung.xml;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.filter.Filters;
import org.jdom2.input.SAXBuilder;
import org.jdom2.xpath.XPathExpression;
import org.jdom2.xpath.XPathFactory;
public class JDomParser {
private File file;
public JDomParser(File file) {
this.file = file;
}
public List<Element> getAllTitles() {
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(this.getFile());
Element tutorials = doc.getRootElement();
List<Element> titles = tutorials.getChildren("tutorial");
return titles;
} catch (JDOMException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public Element getNodeById(String id) {
try {
SAXBuilder builder = new SAXBuilder();
Document document = (Document) builder.build(file);
String filter = "//*[@tutId='" + id + "']";
XPathFactory xFactory = XPathFactory.instance();
XPathExpression<Element> expr = xFactory.compile(filter, Filters.element());
List<Element> node = expr.evaluate(document);
return node.get(0);
} catch (JDOMException | IOException e ) {
e.printStackTrace();
return null;
}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}

View File

@ -0,0 +1,69 @@
package com.baeldung.xml;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.baeldung.xml.binding.Tutorial;
import com.baeldung.xml.binding.Tutorials;
public class JaxbParser {
private File file;
public JaxbParser(File file) {
this.file = file;
}
public Tutorials getFullDocument() {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Tutorials.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Tutorials tutorials = (Tutorials) jaxbUnmarshaller.unmarshal(this.getFile());
return tutorials;
} catch (JAXBException e) {
e.printStackTrace();
return null;
}
}
public void createNewDocument() {
Tutorials tutorials = new Tutorials();
tutorials.setTutorial(new ArrayList<Tutorial>());
Tutorial tut = new Tutorial();
tut.setTutId("01");
tut.setType("XML");
tut.setTitle("XML with Jaxb");
tut.setDescription("XML Binding with Jaxb");
tut.setDate(new Date());
tut.setAuthor("Jaxb author");
tutorials.getTutorial().add(tut);
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Tutorials.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(tutorials, file);
} catch (JAXBException e) {
e.printStackTrace();
}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}

View File

@ -0,0 +1,57 @@
package com.baeldung.xml;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.jaxen.JaxenException;
import org.jaxen.XPath;
import org.jaxen.dom.DOMXPath;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class JaxenDemo {
private File file;
public JaxenDemo(File file) {
this.file = file;
}
public List getAllTutorial(){
try {
FileInputStream fileIS = new FileInputStream(this.getFile());
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(fileIS);
String expression = "/tutorials/tutorial";
XPath path = new DOMXPath(expression);
List result = path.selectNodes(xmlDocument);
return result;
} catch (SAXException | IOException | ParserConfigurationException | JaxenException e) {
e.printStackTrace();
return null;
}
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}

View File

@ -0,0 +1,120 @@
package com.baeldung.xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
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.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import com.baeldung.xml.model.Tutorial;
public class StaxParser {
private File file;
public StaxParser(File file) {
this.file = file;
}
public List<Tutorial> getAllTutorial() {
boolean bTitle = false;
boolean bDescription = false;
boolean bDate = false;
boolean bAuthor = false;
List<Tutorial> tutorials = new ArrayList<Tutorial>();
try {
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(new FileReader(this.getFile()));
Tutorial current = null;
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("tutorial")) {
current = new Tutorial();
Iterator<Attribute> attributes = startElement.getAttributes();
while (attributes.hasNext()) {
Attribute currentAt = attributes.next();
if (currentAt.getName().toString().equalsIgnoreCase("tutId")) {
current.setTutId(currentAt.getValue());
} else if (currentAt.getName().toString().equalsIgnoreCase("type")) {
current.setType(currentAt.getValue());
}
}
} else if (qName.equalsIgnoreCase("title")) {
bTitle = true;
} else if (qName.equalsIgnoreCase("description")) {
bDescription = true;
} else if (qName.equalsIgnoreCase("date")) {
bDate = true;
} else if (qName.equalsIgnoreCase("author")) {
bAuthor = true;
}
break;
case XMLStreamConstants.CHARACTERS:
Characters characters = event.asCharacters();
if (bTitle) {
if (current != null) {
current.setTitle(characters.getData());
}
bTitle = false;
}
if (bDescription) {
if (current != null) {
current.setDescription(characters.getData());
}
bDescription = false;
}
if (bDate) {
if (current != null) {
current.setDate(characters.getData());
}
bDate = false;
}
if (bAuthor) {
if (current != null) {
current.setAuthor(characters.getData());
}
bAuthor = false;
}
break;
case XMLStreamConstants.END_ELEMENT:
EndElement endElement = event.asEndElement();
if (endElement.getName().getLocalPart().equalsIgnoreCase("tutorial")) {
if(current != null){
tutorials.add(current);
}
}
break;
}
}
} catch (FileNotFoundException | XMLStreamException e) {
e.printStackTrace();
}
return tutorials;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}

View File

@ -0,0 +1,61 @@
package com.baeldung.xml.binding;
import java.util.Date;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
public class Tutorial {
private String tutId;
private String type;
private String title;
private String description;
private Date date;
private String author;
public String getTutId() {
return tutId;
}
@XmlAttribute
public void setTutId(String tutId) {
this.tutId = tutId;
}
public String getType() {
return type;
}
@XmlAttribute
public void setType(String type) {
this.type = type;
}
public String getTitle() {
return title;
}
@XmlElement
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
@XmlElement
public void setDescription(String description) {
this.description = description;
}
public Date getDate() {
return date;
}
@XmlElement
public void setDate(Date date) {
this.date = date;
}
public String getAuthor() {
return author;
}
@XmlElement
public void setAuthor(String author) {
this.author = author;
}
}

View File

@ -0,0 +1,23 @@
package com.baeldung.xml.binding;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Tutorials {
private List<Tutorial> tutorial;
public List<Tutorial> getTutorial() {
return tutorial;
}
@XmlElement
public void setTutorial(List<Tutorial> tutorial) {
this.tutorial = tutorial;
}
}

View File

@ -0,0 +1,49 @@
package com.baeldung.xml.model;
public class Tutorial {
private String tutId;
private String type;
private String title;
private String description;
private String date;
private String author;
public String getTutId() {
return tutId;
}
public void setTutId(String tutId) {
this.tutId = tutId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}

View File

@ -8,9 +8,6 @@ import org.junit.Test;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
/**
* Unit test for simple App.
*/
public class DefaultParserTest { public class DefaultParserTest {
final String fileName = "src/test/resources/example.xml"; final String fileName = "src/test/resources/example.xml";
@ -29,7 +26,7 @@ public class DefaultParserTest {
} }
@Test @Test
public void getNodeListByTitle() { public void getNodeListByTitleTest() {
parser = new DefaultParser(new File(fileName)); parser = new DefaultParser(new File(fileName));
NodeList list = parser.getNodeListByTitle("XML"); NodeList list = parser.getNodeListByTitle("XML");
@ -47,7 +44,7 @@ public class DefaultParserTest {
} }
@Test @Test
public void getNodeById() { public void getNodeByIdTest() {
parser = new DefaultParser(new File(fileName)); parser = new DefaultParser(new File(fileName));
Node node = parser.getNodeById("03"); Node node = parser.getNodeById("03");
@ -56,7 +53,7 @@ public class DefaultParserTest {
} }
@Test @Test
public void getNodeListByDate(){ public void getNodeListByDateTest(){
parser = new DefaultParser(new File(fileName)); parser = new DefaultParser(new File(fileName));
NodeList list = parser.getNodeListByTitle("04022016"); NodeList list = parser.getNodeListByTitle("04022016");
for (int i = 0; null != list && i < list.getLength(); i++) { for (int i = 0; null != list && i < list.getLength(); i++) {
@ -73,7 +70,7 @@ public class DefaultParserTest {
} }
@Test @Test
public void getNodeListWithNamespace(){ public void getNodeListWithNamespaceTest(){
parser = new DefaultParser(new File(fileNameSpace)); parser = new DefaultParser(new File(fileNameSpace));
NodeList list = parser.getAllTutorials(); NodeList list = parser.getAllTutorials();
assertNotNull(list); assertNotNull(list);

View File

@ -0,0 +1,88 @@
package com.baeldung.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.dom4j.Element;
import org.dom4j.Node;
import org.junit.Test;
public class Dom4JParserTest {
final String fileName = "src/test/resources/example.xml";
Dom4JParser parser;
@Test
public void getRootElementTest() {
parser = new Dom4JParser(new File(fileName));
Element root = parser.getRootElement();
assertNotNull(root);
assertTrue(root.elements().size() == 4);
}
@Test
public void getFirstElementListTest() {
parser = new Dom4JParser(new File(fileName));
List<Element> firstList = parser.getFirstElementList();
assertNotNull(firstList);
assertTrue(firstList.size() == 4);
assertTrue(firstList.get(0).attributeValue("type").equals("java"));
}
@Test
public void getElementByIdTest() {
parser = new Dom4JParser(new File(fileName));
Node element = parser.getNodeById("03");
String type = element.valueOf("@type");
assertEquals("android", type);
}
@Test
public void getElementsListByTitleTest() {
parser = new Dom4JParser(new File(fileName));
Node element = parser.getElementsListByTitle("XML");
assertEquals("java", element.valueOf("@type"));
assertEquals("02", element.valueOf("@tutId"));
assertEquals("XML", element.selectSingleNode("title").getText());
assertEquals("title", element.selectSingleNode("title").getName());
}
@Test
public void generateModifiedDocumentTest() {
parser = new Dom4JParser(new File(fileName));
parser.generateModifiedDocument();
File generatedFile = new File("src/test/resources/example_updated.xml");
assertTrue(generatedFile.exists());
parser.setFile(generatedFile);
Node element = parser.getNodeById("02");
assertEquals("XML updated", element.selectSingleNode("title").getText());
}
@Test
public void generateNewDocumentTest() {
parser = new Dom4JParser(new File(fileName));
parser.generateNewDocument();
File newFile = new File("src/test/resources/example_new.xml");
assertTrue(newFile.exists());
parser.setFile(newFile);
Node element = parser.getNodeById("01");
assertEquals("XML with Dom4J", element.selectSingleNode("title").getText());
}
}

View File

@ -0,0 +1,38 @@
package com.baeldung.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.jdom2.Element;
import org.junit.Test;
public class JDomParserTest {
final String fileName = "src/test/resources/example.xml";
JDomParser parser;
@Test
public void getFirstElementListTest() {
parser = new JDomParser(new File(fileName));
List<Element> firstList = parser.getAllTitles();
assertNotNull(firstList);
assertTrue(firstList.size() == 4);
assertTrue(firstList.get(0).getAttributeValue("type").equals("java"));
}
@Test
public void getElementByIdTest() {
parser = new JDomParser(new File(fileName));
Element el = parser.getNodeById("03");
String type = el.getAttributeValue("type");
assertEquals("android", type);
}
}

View File

@ -0,0 +1,46 @@
package com.baeldung.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.dom4j.Node;
import org.junit.Test;
import com.baeldung.xml.binding.Tutorials;
public class JaxbParserTest {
final String fileName = "src/test/resources/example.xml";
JaxbParser parser;
@Test
public void getFullDocumentTest(){
parser = new JaxbParser(new File(fileName));
Tutorials tutorials = parser.getFullDocument();
assertNotNull(tutorials);
assertTrue(tutorials.getTutorial().size() == 4);
assertTrue(tutorials.getTutorial().get(0).getType().equalsIgnoreCase("java"));
}
@Test
public void createNewDocumentTest(){
File newFile = new File("src/test/resources/example_new.xml");
parser = new JaxbParser(newFile);
parser.createNewDocument();
assertTrue(newFile.exists());
Tutorials tutorials = parser.getFullDocument();
assertNotNull(tutorials);
assertTrue(tutorials.getTutorial().size() == 1);
assertTrue(tutorials.getTutorial().get(0).getTitle().equalsIgnoreCase("XML with Jaxb"));
}
}

View File

@ -0,0 +1,25 @@
package com.baeldung.xml;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.junit.Test;
public class JaxenDemoTest {
final String fileName = "src/test/resources/example.xml";
JaxenDemo jaxenDemo;
@Test
public void getFirstLevelNodeListTest() {
jaxenDemo = new JaxenDemo(new File(fileName));
List<?> list = jaxenDemo.getAllTutorial();
assertNotNull(list);
assertTrue(list.size() == 4);
}
}

View File

@ -0,0 +1,28 @@
package com.baeldung.xml;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.junit.Test;
import com.baeldung.xml.model.Tutorial;
public class StaxParserTest {
final String fileName = "src/test/resources/example.xml";
StaxParser parser;
@Test
public void getAllTutorialsTest(){
parser = new StaxParser(new File(fileName));
List<Tutorial> tutorials = parser.getAllTutorial();
assertNotNull(tutorials);
assertTrue(tutorials.size() == 4);
assertTrue(tutorials.get(0).getType().equalsIgnoreCase("java"));
}
}

View File

@ -1,24 +1,24 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<Tutorials> <tutorials>
<Tutorial tutId="01" type="java"> <tutorial tutId="01" type="java">
<title>Guava</title> <title>Guava</title>
<description>Introduction to Guava</description> <description>Introduction to Guava</description>
<date>04/04/2016</date> <date>04/04/2016</date>
<author>GuavaAuthor</author> <author>GuavaAuthor</author>
</Tutorial> </tutorial>
<Tutorial tutId="02" type="java"> <tutorial tutId="02" type="java">
<title>XML</title> <title>XML</title>
<description>Introduction to XPath</description> <description>Introduction to XPath</description>
<date>04/05/2016</date> <date>04/05/2016</date>
<author>XMLAuthor</author> <author>XMLAuthor</author>
</Tutorial> </tutorial>
<Tutorial tutId="03" type="android"> <tutorial tutId="03" type="android">
<title>Android</title> <title>Android</title>
<description>Introduction to Android</description> <description>Introduction to Android</description>
<date>04/03/2016</date> <date>04/03/2016</date>
<author>AndroidAuthor</author> <author>AndroidAuthor</author>
</Tutorial> </tutorial>
<Tutorial tutId="04" type="java"> <tutorial tutId="04" type="java">
<title>Spring</title> <title>Spring</title>
<description>Introduction to Spring</description> <description>Introduction to Spring</description>
<date>04/02/2016</date> <date>04/02/2016</date>
@ -28,5 +28,5 @@
<section name="mvc">Spring MVC</section> <section name="mvc">Spring MVC</section>
<section name="batch">Spring Batch</section> <section name="batch">Spring Batch</section>
</sections> </sections>
</Tutorial> </tutorial>
</Tutorials> </tutorials>

View File

@ -1,24 +1,24 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<Tutorials xmlns="http://www.baeldung.com/full_archive"> <tutorials xmlns="http://www.baeldung.com/full_archive">
<Tutorial tutId="01" type="java"> <tutorial tutId="01" type="java">
<title>Guava</title> <title>Guava</title>
<description>Introduction to Guava</description> <description>Introduction to Guava</description>
<date>04/04/2016</date> <date>04/04/2016</date>
<author>GuavaAuthor</author> <author>GuavaAuthor</author>
</Tutorial> </tutorial>
<Tutorial tutId="02" type="java"> <tutorial tutId="02" type="java">
<title>XML</title> <title>XML</title>
<description>Introduction to XPath</description> <description>Introduction to XPath</description>
<date>04/05/2016</date> <date>04/05/2016</date>
<author>XMLAuthor</author> <author>XMLAuthor</author>
</Tutorial> </tutorial>
<Tutorial tutId="03" type="android"> <tutorial tutId="03" type="android">
<title>Android</title> <title>Android</title>
<description>Introduction to Android</description> <description>Introduction to Android</description>
<date>04/03/2016</date> <date>04/03/2016</date>
<author>AndroidAuthor</author> <author>AndroidAuthor</author>
</Tutorial> </tutorial>
<Tutorial tutId="04" type="java"> <tutorial tutId="04" type="java">
<title>Spring</title> <title>Spring</title>
<description>Introduction to Spring</description> <description>Introduction to Spring</description>
<date>04/02/2016</date> <date>04/02/2016</date>
@ -28,5 +28,5 @@
<section name="mvc">Spring MVC</section> <section name="mvc">Spring MVC</section>
<section name="batch">Spring Batch</section> <section name="batch">Spring Batch</section>
</sections> </sections>
</Tutorial> </tutorial>
</Tutorials> </tutorials>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<XMLTutorials>
<tutorial tutId="01" type="xml">
<title>XML with Dom4J</title>
<description>XML handling with Dom4J</description>
<date>14/06/2016</date>
<author>Dom4J tech writer</author>
</tutorial>
</XMLTutorials>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<tutorials>
<tutorial tutId="01" type="java">
<title>Guava updated</title>
<description>Introduction to Guava</description>
<date>04/04/2016</date>
<author>GuavaAuthor</author>
</tutorial>
<tutorial tutId="02" type="java">
<title>XML updated</title>
<description>Introduction to XPath</description>
<date>04/05/2016</date>
<author>XMLAuthor</author>
</tutorial>
<tutorial tutId="03" type="android">
<title>Android updated</title>
<description>Introduction to Android</description>
<date>04/03/2016</date>
<author>AndroidAuthor</author>
</tutorial>
<tutorial tutId="04" type="java">
<title>Spring updated</title>
<description>Introduction to Spring</description>
<date>04/02/2016</date>
<author>SpringAuthor</author>
<sections>
<section name="core">Spring Core</section>
<section name="mvc">Spring MVC</section>
<section name="batch">Spring Batch</section>
</sections>
</tutorial>
</tutorials>