From 2da5b5790131faaafa5d87dd83ad388a3f38ffc2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 26 Sep 2015 17:56:53 +0100 Subject: Allow streams to be parsed as XML --- src/main/java/org/zwobble/mammoth/xml/SimpleSax.java | 11 ++++++++++- src/main/java/org/zwobble/mammoth/xml/XmlParser.java | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java b/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java index d69d00a..bea752a 100644 --- a/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java +++ b/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java @@ -1,6 +1,7 @@ package org.zwobble.mammoth.xml; import java.io.IOException; +import java.io.InputStream; import java.io.StringReader; import java.util.stream.IntStream; @@ -17,7 +18,15 @@ import static java.util.stream.Collectors.toMap; import lombok.val; public class SimpleSax { + public static void parseStream(InputStream input, SimpleSaxHandler handler) { + parseInputSource(new InputSource(input), handler); + } + public static void parseString(String value, SimpleSaxHandler handler) { + parseInputSource(new InputSource(new StringReader(value)), handler); + } + + private static void parseInputSource(InputSource inputSource, SimpleSaxHandler handler) { val parserFactory = SAXParserFactory.newInstance(); parserFactory.setNamespaceAware(true); try { @@ -46,7 +55,7 @@ public class SimpleSax { handler.characters(new String(ch, start, length)); } }); - xmlReader.parse(new InputSource(new StringReader(value))); + xmlReader.parse(inputSource); } catch (ParserConfigurationException | SAXException | IOException exception) { throw new RuntimeException(exception); } diff --git a/src/main/java/org/zwobble/mammoth/xml/XmlParser.java b/src/main/java/org/zwobble/mammoth/xml/XmlParser.java index 064634a..219d02c 100644 --- a/src/main/java/org/zwobble/mammoth/xml/XmlParser.java +++ b/src/main/java/org/zwobble/mammoth/xml/XmlParser.java @@ -1,5 +1,6 @@ package org.zwobble.mammoth.xml; +import java.io.InputStream; import java.util.ArrayDeque; import java.util.Deque; import java.util.Map; @@ -17,6 +18,12 @@ public class XmlParser { public XmlParser(BiMap namespaces) { this.namespaces = namespaces; } + + public XmlElement parseStream(InputStream inputStream) { + val nodeGenerator = new NodeGenerator(); + SimpleSax.parseStream(inputStream, nodeGenerator); + return nodeGenerator.getRoot(); + } public XmlElement parseString(String value) { val nodeGenerator = new NodeGenerator(); -- cgit v1.2.3