From b15688688121c9c0013dbad9a155b4af211fef55 Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Tue, 14 Jun 2016 23:06:52 +0200 Subject: [PATCH 1/8] dom4j --- xml/pom.xml | 273 +++++++++--------- .../java/com/baeldung/xml/Dom4JParser.java | 139 +++++++++ .../com/baeldung/xml/DefaultParserTest.java | 11 +- .../com/baeldung/xml/Dom4JParserTest.java | 88 ++++++ xml/src/test/resources/example_new.xml | 10 + xml/src/test/resources/example_updated.xml | 32 ++ 6 files changed, 412 insertions(+), 141 deletions(-) create mode 100644 xml/src/main/java/com/baeldung/xml/Dom4JParser.java create mode 100644 xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java create mode 100644 xml/src/test/resources/example_new.xml create mode 100644 xml/src/test/resources/example_updated.xml diff --git a/xml/pom.xml b/xml/pom.xml index fc158901e6e9..f190b0af1f71 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -1,139 +1,144 @@ - 4.0.0 - com.baeldung - xml - 0.1-SNAPSHOT - - xml - - - - - - com.google.guava - guava - ${guava.version} - - - - commons-io - commons-io - 2.4 - - - - org.apache.commons - commons-collections4 - 4.0 - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - - - - junit - junit - ${junit.version} - test - - - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - org.mockito - mockito-core - ${mockito.version} - test - - - - - - xml - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - - - - - - 4.3.11.Final - 5.1.38 - - - 2.7.2 - - - 1.7.13 - 1.1.3 - - - 5.1.3.Final - - - 19.0 - 3.4 - - - 1.3 - 4.12 - 1.10.19 - - 4.4.1 - 4.5 - - 2.9.0 - - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 - - + 4.0.0 + com.baeldung + xml + 0.1-SNAPSHOT + + xml + + + + + dom4j + dom4j + 1.6.1 + + + jaxen + jaxen + 1.1.1 + + + + + commons-io + commons-io + 2.4 + + + + org.apache.commons + commons-collections4 + 4.0 + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + + + xml + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + 4.3.11.Final + 5.1.38 + + + 2.7.2 + + + 1.7.13 + 1.1.3 + + + 5.1.3.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + + 4.4.1 + 4.5 + + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + diff --git a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java new file mode 100644 index 000000000000..9d8bb5089fe1 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java @@ -0,0 +1,139 @@ +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 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 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 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 nodes = document.selectNodes("/Tutorials/Tutorial"); + for (Node node : nodes) { + Element element = (Element)node; + Iterator 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("Improve 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; + } + + +} diff --git a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java index 451917a5da8e..734e7a93cbc7 100644 --- a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java @@ -8,9 +8,6 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; -/** - * Unit test for simple App. - */ public class DefaultParserTest { final String fileName = "src/test/resources/example.xml"; @@ -29,7 +26,7 @@ public void getFirstLevelNodeListTest() { } @Test - public void getNodeListByTitle() { + public void getNodeListByTitleTest() { parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("XML"); @@ -47,7 +44,7 @@ public void getNodeListByTitle() { } @Test - public void getNodeById() { + public void getNodeByIdTest() { parser = new DefaultParser(new File(fileName)); Node node = parser.getNodeById("03"); @@ -56,7 +53,7 @@ public void getNodeById() { } @Test - public void getNodeListByDate(){ + public void getNodeListByDateTest(){ parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("04022016"); for (int i = 0; null != list && i < list.getLength(); i++) { @@ -73,7 +70,7 @@ public void getNodeListByDate(){ } @Test - public void getNodeListWithNamespace(){ + public void getNodeListWithNamespaceTest(){ parser = new DefaultParser(new File(fileNameSpace)); NodeList list = parser.getAllTutorials(); assertNotNull(list); diff --git a/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java new file mode 100644 index 000000000000..277eca83558e --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java @@ -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 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()); + + } +} diff --git a/xml/src/test/resources/example_new.xml b/xml/src/test/resources/example_new.xml new file mode 100644 index 000000000000..9b3c6cde89a2 --- /dev/null +++ b/xml/src/test/resources/example_new.xml @@ -0,0 +1,10 @@ + + + + + XML with Dom4J + Improve XML handling with Dom4J + 14/06/2016 + Dom4J tech writer + + diff --git a/xml/src/test/resources/example_updated.xml b/xml/src/test/resources/example_updated.xml new file mode 100644 index 000000000000..d18ff6f92407 --- /dev/null +++ b/xml/src/test/resources/example_updated.xml @@ -0,0 +1,32 @@ + + + + Guava updated + Introduction to Guava + 04/04/2016 + GuavaAuthor + + + XML updated + Introduction to XPath + 04/05/2016 + XMLAuthor + + + Android updated + Introduction to Android + 04/03/2016 + AndroidAuthor + + + Spring updated + Introduction to Spring + 04/02/2016 + SpringAuthor + +
Spring Core
+
Spring MVC
+
Spring Batch
+
+
+
\ No newline at end of file From c93e1b0c9b9810f7b1c1fbfeb217d725ae2a4583 Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Fri, 17 Jun 2016 00:55:35 +0200 Subject: [PATCH 2/8] added more parsers --- xml/pom.xml | 8 +++ .../java/com/baeldung/xml/Dom4JParser.java | 2 +- .../java/com/baeldung/xml/JDomParser.java | 42 +++++++++++++ .../main/java/com/baeldung/xml/JaxenDemo.java | 61 +++++++++++++++++++ .../java/com/baeldung/xml/JDomParserTest.java | 28 +++++++++ .../java/com/baeldung/xml/JaxenDemoTest.java | 25 ++++++++ xml/src/test/resources/example_new.xml | 2 +- 7 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 xml/src/main/java/com/baeldung/xml/JDomParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/JaxenDemo.java create mode 100644 xml/src/test/java/com/baeldung/xml/JDomParserTest.java create mode 100644 xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java diff --git a/xml/pom.xml b/xml/pom.xml index f190b0af1f71..37fa565cd730 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -20,6 +20,14 @@ 1.1.1 + + + org.jdom + jdom2 + 2.0.6 + + + commons-io diff --git a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java index 9d8bb5089fe1..365e805152aa 100644 --- a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java +++ b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java @@ -108,7 +108,7 @@ public void generateNewDocument() { .addText("XML with Dom4J"); tutorialElement.addElement("description") - .addText("Improve XML handling with Dom4J"); + .addText("XML handling with Dom4J"); tutorialElement.addElement("date") .addText("14/06/2016"); diff --git a/xml/src/main/java/com/baeldung/xml/JDomParser.java b/xml/src/main/java/com/baeldung/xml/JDomParser.java new file mode 100644 index 000000000000..5214aa118018 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/JDomParser.java @@ -0,0 +1,42 @@ +package com.baeldung.xml; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.JDOMException; +import org.jdom.input.SAXBuilder; + +public class JDomParser { + + private File file; + + public JDomParser(File file) { + this.file = file; + } + + public List getAllTitles() { + try { + SAXBuilder builder = new SAXBuilder(); + Document doc = builder.build(this.getFile()); + Element tutorials = doc.getRootElement(); + List titles = tutorials.getChildren("Tutorial"); + return titles; + } catch (JDOMException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/JaxenDemo.java b/xml/src/main/java/com/baeldung/xml/JaxenDemo.java new file mode 100644 index 000000000000..13ae08c3a9a8 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/JaxenDemo.java @@ -0,0 +1,61 @@ +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 javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.jaxen.JaxenException; +import org.jaxen.XPath; +import org.jaxen.dom.DOMXPath; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; +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; + } + + +} diff --git a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java new file mode 100644 index 000000000000..24ff088e6900 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java @@ -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.jdom.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 firstList = parser.getAllTitles(); + + assertNotNull(firstList); + assertTrue(firstList.size() == 4); + assertTrue(firstList.get(0).getAttributeValue("type").equals("java")); + } + +} diff --git a/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java new file mode 100644 index 000000000000..2521fcaf8a57 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java @@ -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); + } +} diff --git a/xml/src/test/resources/example_new.xml b/xml/src/test/resources/example_new.xml index 9b3c6cde89a2..020760fdd3f0 100644 --- a/xml/src/test/resources/example_new.xml +++ b/xml/src/test/resources/example_new.xml @@ -3,7 +3,7 @@ XML with Dom4J - Improve XML handling with Dom4J + XML handling with Dom4J 14/06/2016 Dom4J tech writer From 711ab68ef2ff3e554c16801ab532367458b7719c Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Sat, 18 Jun 2016 23:03:30 +0200 Subject: [PATCH 3/8] StaxParser --- .../java/com/baeldung/xml/StaxParser.java | 120 ++++++++++++++++++ .../java/com/baeldung/xml/model/Tutorial.java | 52 ++++++++ .../java/com/baeldung/xml/StaxParserTest.java | 27 ++++ 3 files changed, 199 insertions(+) create mode 100644 xml/src/main/java/com/baeldung/xml/StaxParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/model/Tutorial.java create mode 100644 xml/src/test/java/com/baeldung/xml/StaxParserTest.java diff --git a/xml/src/main/java/com/baeldung/xml/StaxParser.java b/xml/src/main/java/com/baeldung/xml/StaxParser.java new file mode 100644 index 000000000000..f8fd368d6bde --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/StaxParser.java @@ -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 getAllTutorial() { + boolean bTitle = false; + boolean bDescription = false; + boolean bDate = false; + boolean bAuthor = false; + List tutorials = new ArrayList(); + 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 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; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java new file mode 100644 index 000000000000..287db43bcb6e --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java @@ -0,0 +1,52 @@ +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; + } + + + +} diff --git a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java new file mode 100644 index 000000000000..671cc65500aa --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java @@ -0,0 +1,27 @@ +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 tutorials = parser.getAllTutorial(); + + assertNotNull(tutorials); + assertTrue(tutorials.size() == 4); + } +} From d969cc61504d0ce2d202ae3ea1c3124703945a35 Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Sun, 19 Jun 2016 17:46:27 +0200 Subject: [PATCH 4/8] Jaxb binding --- xml/pom.xml | 5 ++ .../java/com/baeldung/xml/DefaultParser.java | 10 +-- .../java/com/baeldung/xml/Dom4JParser.java | 4 +- .../java/com/baeldung/xml/JDomParser.java | 2 +- .../java/com/baeldung/xml/JaxbParser.java | 71 +++++++++++++++++++ .../main/java/com/baeldung/xml/JaxenDemo.java | 6 +- .../java/com/baeldung/xml/StaxParser.java | 4 +- .../com/baeldung/xml/binding/Tutorial.java | 61 ++++++++++++++++ .../com/baeldung/xml/binding/Tutorials.java | 23 ++++++ .../java/com/baeldung/xml/model/Tutorial.java | 3 - .../java/com/baeldung/xml/JaxbParserTest.java | 28 ++++++++ .../java/com/baeldung/xml/StaxParserTest.java | 1 + xml/src/test/resources/example.xml | 20 +++--- xml/src/test/resources/example_namespace.xml | 20 +++--- xml/src/test/resources/example_updated.xml | 20 +++--- 15 files changed, 230 insertions(+), 48 deletions(-) create mode 100644 xml/src/main/java/com/baeldung/xml/JaxbParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/binding/Tutorial.java create mode 100644 xml/src/main/java/com/baeldung/xml/binding/Tutorials.java create mode 100644 xml/src/test/java/com/baeldung/xml/JaxbParserTest.java diff --git a/xml/pom.xml b/xml/pom.xml index 37fa565cd730..a08759edb772 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -27,6 +27,11 @@ 2.0.6 + + xerces + xercesImpl + 2.9.1 + diff --git a/xml/src/main/java/com/baeldung/xml/DefaultParser.java b/xml/src/main/java/com/baeldung/xml/DefaultParser.java index 89326f45c996..1f2a7418fb9f 100644 --- a/xml/src/main/java/com/baeldung/xml/DefaultParser.java +++ b/xml/src/main/java/com/baeldung/xml/DefaultParser.java @@ -39,7 +39,7 @@ public NodeList getFirstLevelNodeList() { XPath xPath = XPathFactory.newInstance().newXPath(); - String expression = "/Tutorials/Tutorial"; + String expression = "/tutorials/tutorial"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); @@ -60,7 +60,7 @@ public Node getNodeById(String id) { 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); @@ -83,7 +83,7 @@ public NodeList getNodeListByTitle(String name) { 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); @@ -107,7 +107,7 @@ public NodeList getElementsByDate(String date) { 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); @@ -151,7 +151,7 @@ public String getNamespaceURI(String arg0) { } }); - String expression = "/bdn:Tutorials/bdn:Tutorial"; + String expression = "/bdn:tutorials/bdn:tutorial"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); diff --git a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java index 365e805152aa..f58d3fe345e6 100644 --- a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java +++ b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java @@ -62,7 +62,7 @@ public Node getElementsListByTitle(String name) { SAXReader reader = new SAXReader(); Document document = reader.read(file); List elements = document - .selectNodes("//Tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"); + .selectNodes("//tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"); return elements.get(0); } catch (DocumentException e) { e.printStackTrace(); @@ -74,7 +74,7 @@ public void generateModifiedDocument() { try { SAXReader reader = new SAXReader(); Document document = reader.read(file); - List nodes = document.selectNodes("/Tutorials/Tutorial"); + List nodes = document.selectNodes("/tutorials/tutorial"); for (Node node : nodes) { Element element = (Element)node; Iterator iterator=element.elementIterator("title"); diff --git a/xml/src/main/java/com/baeldung/xml/JDomParser.java b/xml/src/main/java/com/baeldung/xml/JDomParser.java index 5214aa118018..e629f530088a 100644 --- a/xml/src/main/java/com/baeldung/xml/JDomParser.java +++ b/xml/src/main/java/com/baeldung/xml/JDomParser.java @@ -22,7 +22,7 @@ public List getAllTitles() { SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(this.getFile()); Element tutorials = doc.getRootElement(); - List titles = tutorials.getChildren("Tutorial"); + List titles = tutorials.getChildren("tutorial"); return titles; } catch (JDOMException | IOException e) { // TODO Auto-generated catch block diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java new file mode 100644 index 000000000000..b9df5381dad6 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -0,0 +1,71 @@ +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 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(); + + // output pretty printed + 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; + } + + +} diff --git a/xml/src/main/java/com/baeldung/xml/JaxenDemo.java b/xml/src/main/java/com/baeldung/xml/JaxenDemo.java index 13ae08c3a9a8..0c2dca0573bb 100644 --- a/xml/src/main/java/com/baeldung/xml/JaxenDemo.java +++ b/xml/src/main/java/com/baeldung/xml/JaxenDemo.java @@ -8,15 +8,11 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; import org.jaxen.JaxenException; import org.jaxen.XPath; import org.jaxen.dom.DOMXPath; import org.w3c.dom.Document; -import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class JaxenDemo { @@ -36,7 +32,7 @@ public List getAllTutorial(){ Document xmlDocument = builder.parse(fileIS); - String expression = "/Tutorials/Tutorial"; + String expression = "/tutorials/tutorial"; XPath path = new DOMXPath(expression); List result = path.selectNodes(xmlDocument); diff --git a/xml/src/main/java/com/baeldung/xml/StaxParser.java b/xml/src/main/java/com/baeldung/xml/StaxParser.java index f8fd368d6bde..6f83e022f86c 100644 --- a/xml/src/main/java/com/baeldung/xml/StaxParser.java +++ b/xml/src/main/java/com/baeldung/xml/StaxParser.java @@ -43,7 +43,7 @@ public List getAllTutorial() { case XMLStreamConstants.START_ELEMENT: StartElement startElement = event.asStartElement(); String qName = startElement.getName().getLocalPart(); - if (qName.equalsIgnoreCase("Tutorial")) { + if (qName.equalsIgnoreCase("tutorial")) { current = new Tutorial(); Iterator attributes = startElement.getAttributes(); while (attributes.hasNext()) { @@ -93,7 +93,7 @@ public List getAllTutorial() { break; case XMLStreamConstants.END_ELEMENT: EndElement endElement = event.asEndElement(); - if (endElement.getName().getLocalPart().equalsIgnoreCase("Tutorial")) { + if (endElement.getName().getLocalPart().equalsIgnoreCase("tutorial")) { if(current != null){ tutorials.add(current); } diff --git a/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java new file mode 100644 index 000000000000..c4668a9f77ae --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java @@ -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; + } +} diff --git a/xml/src/main/java/com/baeldung/xml/binding/Tutorials.java b/xml/src/main/java/com/baeldung/xml/binding/Tutorials.java new file mode 100644 index 000000000000..ab6669c0ad65 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/binding/Tutorials.java @@ -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; + + public List getTutorial() { + return tutorial; + } + + @XmlElement + public void setTutorial(List tutorial) { + this.tutorial = tutorial; + } + + +} diff --git a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java index 287db43bcb6e..40a3f858cfe9 100644 --- a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java +++ b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java @@ -46,7 +46,4 @@ public String getAuthor() { public void setAuthor(String author) { this.author = author; } - - - } diff --git a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java new file mode 100644 index 000000000000..cae3b55a2630 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java @@ -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 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")); + } +} diff --git a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java index 671cc65500aa..3188777a79e3 100644 --- a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java @@ -23,5 +23,6 @@ public void getAllTutorialsTest(){ assertNotNull(tutorials); assertTrue(tutorials.size() == 4); + assertTrue(tutorials.get(0).getType().equalsIgnoreCase("java")); } } diff --git a/xml/src/test/resources/example.xml b/xml/src/test/resources/example.xml index d546dd137b83..0993b6240acf 100644 --- a/xml/src/test/resources/example.xml +++ b/xml/src/test/resources/example.xml @@ -1,24 +1,24 @@ - - + + Guava Introduction to Guava 04/04/2016 GuavaAuthor - - + + XML Introduction to XPath 04/05/2016 XMLAuthor - - + + Android Introduction to Android 04/03/2016 AndroidAuthor - - + + Spring Introduction to Spring 04/02/2016 @@ -28,5 +28,5 @@
Spring MVC
Spring Batch
-
-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/xml/src/test/resources/example_namespace.xml b/xml/src/test/resources/example_namespace.xml index 26131302ea67..f1a880951a72 100644 --- a/xml/src/test/resources/example_namespace.xml +++ b/xml/src/test/resources/example_namespace.xml @@ -1,24 +1,24 @@ - - + + Guava Introduction to Guava 04/04/2016 GuavaAuthor - - + + XML Introduction to XPath 04/05/2016 XMLAuthor - - + + Android Introduction to Android 04/03/2016 AndroidAuthor - - + + Spring Introduction to Spring 04/02/2016 @@ -28,5 +28,5 @@
Spring MVC
Spring Batch
-
-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/xml/src/test/resources/example_updated.xml b/xml/src/test/resources/example_updated.xml index d18ff6f92407..962ca0c88935 100644 --- a/xml/src/test/resources/example_updated.xml +++ b/xml/src/test/resources/example_updated.xml @@ -1,24 +1,24 @@ - - + + Guava updated Introduction to Guava 04/04/2016 GuavaAuthor - - + + XML updated Introduction to XPath 04/05/2016 XMLAuthor - - + + Android updated Introduction to Android 04/03/2016 AndroidAuthor - - + + Spring updated Introduction to Spring 04/02/2016 @@ -28,5 +28,5 @@
Spring MVC
Spring Batch
-
-
\ No newline at end of file +
+
\ No newline at end of file From 13e4aff3d9ee5d37d2885e00800690cee261119a Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Sun, 19 Jun 2016 18:05:02 +0200 Subject: [PATCH 5/8] Jaxb binding --- .../java/com/baeldung/xml/JaxbParser.java | 41 +++++++++---------- .../java/com/baeldung/xml/JaxbParserTest.java | 18 ++++++++ xml/src/test/resources/example_new.xml | 19 ++++----- 3 files changed, 47 insertions(+), 31 deletions(-) diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java index b9df5381dad6..51e4ef5da66b 100644 --- a/xml/src/main/java/com/baeldung/xml/JaxbParser.java +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -19,8 +19,8 @@ public class JaxbParser { public JaxbParser(File file) { this.file = file; } - - public Tutorials getFullDocument(){ + + public Tutorials getFullDocument() { try { JAXBContext jaxbContext = JAXBContext.newInstance(Tutorials.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); @@ -31,20 +31,20 @@ public Tutorials getFullDocument(){ return null; } } - - public void createNewDocument(){ - Tutorials tutorials = new Tutorials(); - tutorials.setTutorial(new ArrayList()); - 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{ + + public void createNewDocument() { + Tutorials tutorials = new Tutorials(); + tutorials.setTutorial(new ArrayList()); + 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(); @@ -52,10 +52,10 @@ public void createNewDocument(){ jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(tutorials, file); - - }catch (JAXBException e) { + + } catch (JAXBException e) { e.printStackTrace(); - } + } } @@ -66,6 +66,5 @@ public File getFile() { public void setFile(File file) { this.file = file; } - - + } diff --git a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java index cae3b55a2630..4d6ddf5f65bb 100644 --- a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java @@ -1,10 +1,12 @@ 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; @@ -25,4 +27,20 @@ public void getFullDocumentTest(){ 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")); + } } diff --git a/xml/src/test/resources/example_new.xml b/xml/src/test/resources/example_new.xml index 020760fdd3f0..82dff77f7b0b 100644 --- a/xml/src/test/resources/example_new.xml +++ b/xml/src/test/resources/example_new.xml @@ -1,10 +1,9 @@ - - - - - XML with Dom4J - XML handling with Dom4J - 14/06/2016 - Dom4J tech writer - - + + + + Jaxb author + 2016-06-19T18:04:34.767+02:00 + XML Binding with Jaxb + XML with Jaxb + + From 8466bc03589b502eb34e547f6aa74adff189eda5 Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Sun, 19 Jun 2016 22:46:14 +0200 Subject: [PATCH 6/8] Finish article --- xml/pom.xml | 42 +----------- .../java/com/baeldung/xml/Dom4JParser.java | 68 ++++++++----------- .../java/com/baeldung/xml/JDomParser.java | 28 ++++++-- .../java/com/baeldung/xml/JaxbParser.java | 1 - .../java/com/baeldung/xml/JDomParserTest.java | 12 +++- xml/src/test/resources/example_new.xml | 19 +++--- 6 files changed, 76 insertions(+), 94 deletions(-) diff --git a/xml/pom.xml b/xml/pom.xml index a08759edb772..9d88bd75ebc8 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -17,7 +17,7 @@ jaxen jaxen - 1.1.1 + 1.1.6 @@ -62,26 +62,6 @@ test
- - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - org.mockito - mockito-core - ${mockito.version} - test - - @@ -116,33 +96,13 @@ - - 4.3.11.Final - 5.1.38 - - - 2.7.2 - - - 1.7.13 - 1.1.3 - - - 5.1.3.Final 19.0 3.4 - 1.3 4.12 - 1.10.19 - - 4.4.1 - 4.5 - - 2.9.0 3.5.1 diff --git a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java index f58d3fe345e6..d9058ba2361d 100644 --- a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java +++ b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java @@ -74,19 +74,18 @@ public void generateModifiedDocument() { try { SAXReader reader = new SAXReader(); Document document = reader.read(file); - List nodes = document.selectNodes("/tutorials/tutorial"); - for (Node node : nodes) { - Element element = (Element)node; - Iterator 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(); + List nodes = document.selectNodes("/tutorials/tutorial"); + for (Node node : nodes) { + Element element = (Element) node; + Iterator 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(); @@ -95,32 +94,26 @@ public void generateModifiedDocument() { 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(); + 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(); @@ -134,6 +127,5 @@ public File getFile() { public void setFile(File file) { this.file = file; } - - + } diff --git a/xml/src/main/java/com/baeldung/xml/JDomParser.java b/xml/src/main/java/com/baeldung/xml/JDomParser.java index e629f530088a..08676b44f8f8 100644 --- a/xml/src/main/java/com/baeldung/xml/JDomParser.java +++ b/xml/src/main/java/com/baeldung/xml/JDomParser.java @@ -4,10 +4,14 @@ import java.io.IOException; import java.util.List; -import org.jdom.Document; -import org.jdom.Element; -import org.jdom.JDOMException; -import org.jdom.input.SAXBuilder; +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 { @@ -30,6 +34,22 @@ public List getAllTitles() { 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 expr = xFactory.compile(filter, Filters.element()); + List node = expr.evaluate(document); + + return node.get(0); + } catch (JDOMException | IOException e ) { + e.printStackTrace(); + return null; + } + } public File getFile() { return file; diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java index 51e4ef5da66b..9c06ec5fba1a 100644 --- a/xml/src/main/java/com/baeldung/xml/JaxbParser.java +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -48,7 +48,6 @@ public void createNewDocument() { JAXBContext jaxbContext = JAXBContext.newInstance(Tutorials.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); - // output pretty printed jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(tutorials, file); diff --git a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java index 24ff088e6900..981458469f1e 100644 --- a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java @@ -1,12 +1,13 @@ 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.jdom.Element; +import org.jdom2.Element; import org.junit.Test; public class JDomParserTest { @@ -25,4 +26,13 @@ public void getFirstElementListTest() { 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); + } + } diff --git a/xml/src/test/resources/example_new.xml b/xml/src/test/resources/example_new.xml index 82dff77f7b0b..020760fdd3f0 100644 --- a/xml/src/test/resources/example_new.xml +++ b/xml/src/test/resources/example_new.xml @@ -1,9 +1,10 @@ - - - - Jaxb author - 2016-06-19T18:04:34.767+02:00 - XML Binding with Jaxb - XML with Jaxb - - + + + + + XML with Dom4J + XML handling with Dom4J + 14/06/2016 + Dom4J tech writer + + From e9827bffe5f03a7b3ba3bf759afea0c9f5ef0f5d Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Tue, 28 Jun 2016 19:25:26 +0200 Subject: [PATCH 7/8] apply some changes --- .../java/com/baeldung/xml/JaxbParser.java | 2 +- .../java/com/baeldung/xml/StaxParser.java | 3 +- .../com/baeldung/xml/binding/Tutorial.java | 8 ++- .../java/com/baeldung/xml/model/Tutorial.java | 49 ------------------- .../java/com/baeldung/xml/StaxParserTest.java | 2 +- 5 files changed, 7 insertions(+), 57 deletions(-) delete mode 100644 xml/src/main/java/com/baeldung/xml/model/Tutorial.java diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java index 9c06ec5fba1a..adeeba616ffa 100644 --- a/xml/src/main/java/com/baeldung/xml/JaxbParser.java +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -40,7 +40,7 @@ public void createNewDocument() { tut.setType("XML"); tut.setTitle("XML with Jaxb"); tut.setDescription("XML Binding with Jaxb"); - tut.setDate(new Date()); + tut.setDate("04/02/2015"); tut.setAuthor("Jaxb author"); tutorials.getTutorial().add(tut); diff --git a/xml/src/main/java/com/baeldung/xml/StaxParser.java b/xml/src/main/java/com/baeldung/xml/StaxParser.java index 6f83e022f86c..e4be4e4a3f88 100644 --- a/xml/src/main/java/com/baeldung/xml/StaxParser.java +++ b/xml/src/main/java/com/baeldung/xml/StaxParser.java @@ -4,6 +4,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; @@ -17,7 +18,7 @@ import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; -import com.baeldung.xml.model.Tutorial; +import com.baeldung.xml.binding.Tutorial; public class StaxParser { diff --git a/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java index c4668a9f77ae..7201d499d0f3 100644 --- a/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java +++ b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java @@ -1,7 +1,5 @@ package com.baeldung.xml.binding; -import java.util.Date; - import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; @@ -11,7 +9,7 @@ public class Tutorial { private String type; private String title; private String description; - private Date date; + private String date; private String author; @@ -44,11 +42,11 @@ public String getDescription() { public void setDescription(String description) { this.description = description; } - public Date getDate() { + public String getDate() { return date; } @XmlElement - public void setDate(Date date) { + public void setDate(String date) { this.date = date; } public String getAuthor() { diff --git a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java deleted file mode 100644 index 40a3f858cfe9..000000000000 --- a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java +++ /dev/null @@ -1,49 +0,0 @@ -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; - } -} diff --git a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java index 3188777a79e3..cf7ee1ee7584 100644 --- a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java @@ -8,7 +8,7 @@ import org.junit.Test; -import com.baeldung.xml.model.Tutorial; +import com.baeldung.xml.binding.Tutorial; public class StaxParserTest { From e2e32dc289e6f12ae1d343a02fde53d7cedc1c3a Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Tue, 28 Jun 2016 21:03:07 +0200 Subject: [PATCH 8/8] Organize imports --- xml/src/main/java/com/baeldung/xml/JaxbParser.java | 1 - xml/src/main/java/com/baeldung/xml/StaxParser.java | 1 - xml/src/test/java/com/baeldung/xml/JaxbParserTest.java | 2 -- 3 files changed, 4 deletions(-) diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java index adeeba616ffa..758ebb969c6d 100644 --- a/xml/src/main/java/com/baeldung/xml/JaxbParser.java +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -2,7 +2,6 @@ import java.io.File; import java.util.ArrayList; -import java.util.Date; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; diff --git a/xml/src/main/java/com/baeldung/xml/StaxParser.java b/xml/src/main/java/com/baeldung/xml/StaxParser.java index e4be4e4a3f88..e14d872831af 100644 --- a/xml/src/main/java/com/baeldung/xml/StaxParser.java +++ b/xml/src/main/java/com/baeldung/xml/StaxParser.java @@ -4,7 +4,6 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayList; -import java.util.Date; import java.util.Iterator; import java.util.List; diff --git a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java index 4d6ddf5f65bb..6c31a7bfddbb 100644 --- a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java @@ -1,12 +1,10 @@ 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;