From 53f27cf1a80151bbf06fa9e900c744f06e907f77 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 26 Sep 2015 17:47:01 +0100 Subject: Allow namespacing mapping in element names --- src/main/java/org/zwobble/mammoth/xml/XmlParser.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/mammoth/xml/XmlParser.java b/src/main/java/org/zwobble/mammoth/xml/XmlParser.java index 5b26de3..064634a 100644 --- a/src/main/java/org/zwobble/mammoth/xml/XmlParser.java +++ b/src/main/java/org/zwobble/mammoth/xml/XmlParser.java @@ -5,19 +5,26 @@ import java.util.Deque; import java.util.Map; import com.google.common.base.Strings; +import com.google.common.collect.BiMap; import static java.util.stream.Collectors.toMap; import lombok.val; public class XmlParser { - public static XmlElement parseString(String value) { + private final BiMap namespaces; + + public XmlParser(BiMap namespaces) { + this.namespaces = namespaces; + } + + public XmlElement parseString(String value) { val nodeGenerator = new NodeGenerator(); SimpleSax.parseString(value, nodeGenerator); return nodeGenerator.getRoot(); } - private static class NodeGenerator implements SimpleSaxHandler { + private class NodeGenerator implements SimpleSaxHandler { private final Deque elementStack; public NodeGenerator() { @@ -43,6 +50,8 @@ public class XmlParser { private String readName(ElementName name) { if (Strings.isNullOrEmpty(name.getUri())) { return name.getLocalName(); + } else if (namespaces.containsValue(name.getUri())) { + return namespaces.inverse().get(name.getUri()) + ":" + name.getLocalName(); } else { return "{" + name.getUri() + "}" + name.getLocalName(); } -- cgit v1.2.3