diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-09-26 17:33:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-09-26 17:33:13 +0100 |
| commit | be6fbc6f4e2f80552d3a7bab8677066d1fc858fc (patch) | |
| tree | 365f33cb3c09e838ff7bfab33609c919b73508ac /src/main/java/org/zwobble/mammoth/xml/SimpleSax.java | |
| parent | 0cdeb56333f61fc5769749106496106cfd8ffbfe (diff) | |
Add simple XML parsing
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/xml/SimpleSax.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/xml/SimpleSax.java | 54 |
1 files changed, 54 insertions, 0 deletions
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); + } + } +} |
