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,52 +17,58 @@ 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));
while(reader.hasNext()){ while (reader.hasNext()) {
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()
case "website": .getLocalPart()) {
webSite = new WebSite(); case "website":
Attribute url = startElement.getAttributeByName(new QName("url")); website = new WebSite();
if (url != null) { Attribute url = startElement.getAttributeByName(new QName("url"));
webSite.setUrl(url.getValue()); if (url != null) {
} website.setUrl(url.getValue());
break; }
case "name": break;
nextEvent = reader.nextEvent(); case "name":
webSite.setName(nextEvent.asCharacters().getData()); nextEvent = reader.nextEvent();
break; website.setName(nextEvent.asCharacters()
case "category": .getData());
nextEvent = reader.nextEvent(); break;
webSite.setCategory(nextEvent.asCharacters().getData()); case "category":
break; nextEvent = reader.nextEvent();
case "status": website.setCategory(nextEvent.asCharacters()
nextEvent = reader.nextEvent(); .getData());
webSite.setStatus(nextEvent.asCharacters().getData()); break;
break; case "status":
nextEvent = reader.nextEvent();
website.setStatus(nextEvent.asCharacters()
.getData());
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);
} }
} }
} }
} catch (XMLStreamException xse){ } catch (XMLStreamException xse) {
System.out.println("XMLStreamException"); System.out.println("XMLStreamException");
xse.printStackTrace(); xse.printStackTrace();
} catch (FileNotFoundException fnfe) { } catch (FileNotFoundException fnfe) {
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());
} }
} }