aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/mammoth/xml/SimpleSax.java11
-rw-r--r--src/main/java/org/zwobble/mammoth/xml/XmlParser.java7
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java9
3 files changed, 26 insertions, 1 deletions
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<String, String> 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();
diff --git a/src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java b/src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java
index 6b3343d..be1eced 100644
--- a/src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java
@@ -1,5 +1,7 @@
package org.zwobble.mammoth.tests.xml;
+import java.io.ByteArrayInputStream;
+
import org.junit.Test;
import org.zwobble.mammoth.xml.XmlElement;
import org.zwobble.mammoth.xml.XmlParser;
@@ -91,4 +93,11 @@ public class XmlParserTests {
parser.parseString("<body xmlns:w='word' w:name='bob'/>"),
is(new XmlElement("body", ImmutableMap.of("x:name", "bob"))));
}
+
+ @Test
+ public void canParseInputStream() {
+ assertThat(
+ parser.parseStream(new ByteArrayInputStream("<body/>".getBytes())),
+ is(new XmlElement("body")));
+ }
}