This commit is contained in:
pazis 2019-08-28 11:00:23 +00:00
parent a14c19d4e2
commit 0eedbaa5f4
2 changed files with 38 additions and 31 deletions

View File

@ -1,4 +1,5 @@
package com.baeldung.xml.stax; package com.baeldung.xml.stax;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.List; import java.util.List;
@ -16,8 +17,8 @@ import javax.xml.namespace.QName;
public class StaxParser { public class StaxParser {
public static List<WebSite> parse(String path) { public static List<WebSite> parse(String path) {
List<WebSite> webSites = new ArrayList<WebSite>(); List<WebSite> websites = new ArrayList<WebSite>();
WebSite webSite = null; WebSite website = null;
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
try { try {
XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(path)); XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(path));
@ -25,32 +26,38 @@ public class StaxParser {
XMLEvent nextEvent = reader.nextEvent(); XMLEvent nextEvent = reader.nextEvent();
if (nextEvent.isStartElement()) { if (nextEvent.isStartElement()) {
StartElement startElement = nextEvent.asStartElement(); StartElement startElement = nextEvent.asStartElement();
switch (startElement.getName().getLocalPart()) { switch (startElement.getName()
.getLocalPart()) {
case "website": case "website":
webSite = new WebSite(); website = new WebSite();
Attribute url = startElement.getAttributeByName(new QName("url")); Attribute url = startElement.getAttributeByName(new QName("url"));
if (url != null) { if (url != null) {
webSite.setUrl(url.getValue()); website.setUrl(url.getValue());
} }
break; break;
case "name": case "name":
nextEvent = reader.nextEvent(); nextEvent = reader.nextEvent();
webSite.setName(nextEvent.asCharacters().getData()); website.setName(nextEvent.asCharacters()
.getData());
break; break;
case "category": case "category":
nextEvent = reader.nextEvent(); nextEvent = reader.nextEvent();
webSite.setCategory(nextEvent.asCharacters().getData()); website.setCategory(nextEvent.asCharacters()
.getData());
break; break;
case "status": case "status":
nextEvent = reader.nextEvent(); nextEvent = reader.nextEvent();
webSite.setStatus(nextEvent.asCharacters().getData()); website.setStatus(nextEvent.asCharacters()
.getData());
break; break;
} }
} }
if (nextEvent.isEndElement()) { if (nextEvent.isEndElement()) {
EndElement endElement = nextEvent.asEndElement(); EndElement endElement = nextEvent.asEndElement();
if(endElement.getName().getLocalPart().equals("website")){ if (endElement.getName()
webSites.add(webSite); .getLocalPart()
.equals("website")) {
websites.add(website);
} }
} }
} }
@ -61,7 +68,7 @@ public class StaxParser {
System.out.println("FileNotFoundException"); System.out.println("FileNotFoundException");
fnfe.printStackTrace(); fnfe.printStackTrace();
} }
return webSites; return websites;
} }
} }

View File

@ -20,12 +20,12 @@ public class StaxParserUnitTest {
@Test @Test
public void givenWebsitesXML_whenParsed_thenSizeIsThree() { public void givenWebsitesXML_whenParsed_thenSizeIsThree() {
List<WebSite> websites = StaxParser.parse("src/test/resources/xml/websites.xml"); List<WebSite> websites = StaxParser.parse("src/test/resources/xml/websites.xml");
assertTrue(websites.size() == 3); assertEquals(3, websites.size());
} }
@Test @Test
public void givenWebsitesXML_whenParsed_thenLocalhostExists() { public void givenWebsitesXML_whenParsed_thenLocalhostExists() {
List<WebSite> websites = StaxParser.parse("src/test/resources/xml/websites.xml"); List<WebSite> websites = StaxParser.parse("src/test/resources/xml/websites.xml");
assertEquals(websites.get(2).getName(),"Localhost"); assertEquals("Localhost", websites.get(2).getName());
} }
} }