XML libraries support (#463)
* dom4j * added more parsers * StaxParser * Jaxb binding * Jaxb binding * Finish article
This commit is contained in:
parent
a661e0e3c9
commit
330c8680c9
200
xml/pom.xml
200
xml/pom.xml
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
Loading…
Reference in New Issue