From be6fbc6f4e2f80552d3a7bab8677066d1fc858fc Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 26 Sep 2015 17:33:13 +0100 Subject: Add simple XML parsing --- .../java/org/zwobble/mammoth/xml/SimpleSax.java | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/xml/SimpleSax.java (limited to 'src/main/java/org/zwobble/mammoth/xml/SimpleSax.java') diff --git a/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java b/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java new file mode 100644 index 0000000..8165552 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java @@ -0,0 +1,54 @@ +package org.zwobble.mammoth.xml; + +import java.io.IOException; +import java.io.StringReader; +import java.util.stream.IntStream; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import static java.util.stream.Collectors.toMap; + +import lombok.val; + +public class SimpleSax { + public static void parseString(String value, SimpleSaxHandler handler) { + val parserFactory = SAXParserFactory.newInstance(); + parserFactory.setNamespaceAware(true); + try { + val saxParser = parserFactory.newSAXParser(); + val xmlReader = saxParser.getXMLReader(); + xmlReader.setContentHandler(new DefaultHandler() { + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + final ElementName name = new ElementName(localName); + val attributesMap = IntStream.range(0, attributes.getLength()) + .boxed() + .collect(toMap( + index -> new ElementName(attributes.getLocalName(index)), + attributes::getValue + )); + handler.startElement(name, attributesMap); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + handler.endElement(); + } + + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + handler.characters(new String(ch, start, length)); + } + }); + xmlReader.parse(new InputSource(new StringReader(value))); + } catch (ParserConfigurationException | SAXException | IOException exception) { + throw new RuntimeException(exception); + } + } +} -- cgit v1.2.3