Advertisement
Guest User

XML-ParsingError when parsing String

a guest
Apr 2nd, 2015
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.29 KB | None | 0 0
  1. package tests.xmlparsing;
  2.  
  3. import org.junit.Test;
  4. import org.xml.sax.Attributes;
  5. import org.xml.sax.SAXException;
  6. import org.xml.sax.helpers.DefaultHandler;
  7. import java.io.*;
  8. import java.util.LinkedList;
  9. import java.util.List;
  10. import javax.xml.parsers.*;
  11.  
  12. import static org.junit.Assert.*;
  13.  
  14. /**
  15.  * Created by simonlammer on 14.03.15.
  16.  */
  17. public class XMLParserTest {
  18.     private static SAXHandler handler;
  19.     private static String xmlString;
  20.     static {
  21.         handler = new SAXHandler();
  22.         xmlString =
  23.             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\r\n" +
  24.             "<root>                                    " + "\r\n" +
  25.             "   <subnode>                              " + "\r\n" +
  26.             "       <id>s1</id>                        " + "\r\n" +
  27.             "       <name>Subnode one</name>           " + "\r\n" +
  28.             "       <value>11</value>                  " + "\r\n" +
  29.             "   </subnode>                             " + "\r\n" +
  30.             "   <subnode>                              " + "\r\n" +
  31.             "       <id>s2</id>                        " + "\r\n" +
  32.             "       <name>Subnode two</name>           " + "\r\n" +
  33.             "       <value>22</value>                  " + "\r\n" +
  34.             "   </subnode>                             " + "\r\n" +
  35.             "</root>                                   ";
  36.     }
  37.     private SAXParser parser;
  38.  
  39.     public XMLParserTest() throws ParserConfigurationException, SAXException {
  40.         this.parser = newSAXParser();
  41.     }
  42.  
  43.     private SAXParser newSAXParser() throws ParserConfigurationException, SAXException {
  44.         SAXParserFactory factory = SAXParserFactory.newInstance();
  45.         SAXParser parser = factory.newSAXParser(); // throws ParserConfigurationException
  46.         return parser;
  47.     }
  48.  
  49.     @Test
  50.     public void SAXParserNotNullTest() {
  51.         assertNotNull(parser);
  52.     }
  53.  
  54.     @Test
  55.     public void SAXHandlerNotNullTest() {
  56.         assertNotNull(handler);
  57.     }
  58.  
  59.     @Test
  60.     public void ParseFileTest() throws IOException, SAXException {
  61.         // create File
  62.         File file = new File("temporaryXMLFileUsedForUnitTest.xml");
  63.         try {
  64.             FileWriter fw = new FileWriter(file);
  65.             fw.write(xmlString);
  66.             fw.flush();
  67.             fw.close();
  68.         } catch (IOException e) {
  69.             fail("Could not create file");
  70.         }
  71.  
  72.         // parse
  73.         handler.clearElements();
  74.         parser.parse(file, handler);
  75.         List<SampleElement> elements = handler.getElements();
  76.  
  77.         // validate
  78.         validateElementList(elements);
  79.  
  80.         // delete file
  81.         file.delete();
  82.     }
  83.  
  84.     @Test
  85.     public void ParseStringTest() throws IOException, SAXException {
  86.         // parse
  87.         handler.clearElements();
  88.         parser.parse(xmlString, handler);
  89.         List<SampleElement> elements = handler.getElements();
  90.  
  91.         // validate
  92.         validateElementList(elements);
  93.     }
  94.  
  95.     private void validateElementList(List<SampleElement> elements) {
  96.         assertEquals(2,             elements.size());
  97.         assertEquals("s1",          elements.get(0).getId());
  98.         assertEquals("Subnode one", elements.get(0).getName());
  99.         assertEquals(11,            elements.get(0).getValue());
  100.         assertEquals("s2",          elements.get(1).getId());
  101.         assertEquals("Subnode two", elements.get(1).getName());
  102.         assertEquals(22,            elements.get(1).getValue());
  103.     }
  104.  
  105.     public static class SampleElement {
  106.         private String id;
  107.         private String name;
  108.         private int value;
  109.  
  110.         public SampleElement(String id, String name, int value) {
  111.             this.id = id;
  112.             this.name = name;
  113.             this.value = value;
  114.         }
  115.  
  116.         public String getId() {
  117.             return id;
  118.         }
  119.  
  120.         public String getName() {
  121.             return name;
  122.         }
  123.  
  124.         public int getValue() {
  125.             return value;
  126.         }
  127.     }
  128.  
  129.     public static class SAXHandler extends DefaultHandler {
  130.         private LinkedList<SampleElement> elements;
  131.         private String id;
  132.         private String name;
  133.         private boolean tagId = false;
  134.         private boolean tagName = false;
  135.         private boolean tagValue = false;
  136.         private String value;
  137.  
  138.         public SAXHandler() {
  139.             elements = new LinkedList<>();
  140.         }
  141.  
  142.         public void clearElements() {
  143.             elements.clear();
  144.         }
  145.  
  146.         @Override
  147.         public void characters(char[] ch, int start, int length) throws SAXException {
  148.             String str = new String(ch, start, length);
  149.             if (tagId) {
  150.                 id = str;
  151.             } else if (tagName) {
  152.                 name = str;
  153.             } else if (tagValue) {
  154.                 value = str;
  155.             }
  156.         }
  157.  
  158.         public List<SampleElement> getElements() {
  159.             return (LinkedList<SampleElement>) elements.clone();
  160.         }
  161.  
  162.         @Override
  163.         public void endElement(String uri, String localName, String qName) throws SAXException {
  164.             if (qName.equalsIgnoreCase("id")) {
  165.                 tagId = false;
  166.             } else if (qName.equalsIgnoreCase("name")) {
  167.                 tagName = false;
  168.             } else if (qName.equalsIgnoreCase("value")) {
  169.                 tagValue = false;
  170.  
  171.                 // create new SampleElement
  172.                 if (id != null && name != null && value != null) {
  173.                     int val = Integer.parseInt(value);
  174.                     SampleElement element = new SampleElement(id, name, val);
  175.                     elements.add(element);
  176.  
  177.                     // clear strings
  178.                     id = name = value = null;
  179.                 }
  180.             }
  181.         }
  182.  
  183.         @Override
  184.         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  185.             if (qName.equalsIgnoreCase("id")) {
  186.                 tagId = true;
  187.                 id = null;
  188.             } else if (qName.equalsIgnoreCase("name")) {
  189.                 tagName = true;
  190.                 name = null;
  191.             } else if (qName.equalsIgnoreCase("value")) {
  192.                 tagValue = true;
  193.                 value = null;
  194.             }
  195.         }
  196.     }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement