diff options
Diffstat (limited to 'src')
4 files changed, 23 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/mammoth/xml/ElementName.java b/src/main/java/org/zwobble/mammoth/xml/ElementName.java index 1d70c36..9e51e0c 100644 --- a/src/main/java/org/zwobble/mammoth/xml/ElementName.java +++ b/src/main/java/org/zwobble/mammoth/xml/ElementName.java @@ -4,5 +4,6 @@ import lombok.Value; @Value public class ElementName { + private String uri; private String localName; } diff --git a/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java b/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java index 8165552..d69d00a 100644 --- a/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java +++ b/src/main/java/org/zwobble/mammoth/xml/SimpleSax.java @@ -26,11 +26,11 @@ public class SimpleSax { xmlReader.setContentHandler(new DefaultHandler() { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - final ElementName name = new ElementName(localName); + final ElementName name = new ElementName(uri, localName); val attributesMap = IntStream.range(0, attributes.getLength()) .boxed() .collect(toMap( - index -> new ElementName(attributes.getLocalName(index)), + index -> new ElementName(attributes.getURI(index), attributes.getLocalName(index)), attributes::getValue )); handler.startElement(name, attributesMap); diff --git a/src/main/java/org/zwobble/mammoth/xml/XmlParser.java b/src/main/java/org/zwobble/mammoth/xml/XmlParser.java index 360c174..5b26de3 100644 --- a/src/main/java/org/zwobble/mammoth/xml/XmlParser.java +++ b/src/main/java/org/zwobble/mammoth/xml/XmlParser.java @@ -4,6 +4,8 @@ import java.util.ArrayDeque; import java.util.Deque; import java.util.Map; +import com.google.common.base.Strings; + import static java.util.stream.Collectors.toMap; import lombok.val; @@ -32,12 +34,21 @@ public class XmlParser { .entrySet() .stream() .collect(toMap( - entry -> entry.getKey().getLocalName(), + entry -> readName(entry.getKey()), entry -> entry.getValue())); - val element = new XmlElementBuilder(name.getLocalName(), simpleAttributes); + val element = new XmlElementBuilder(readName(name), simpleAttributes); elementStack.add(element); } + private String readName(ElementName name) { + if (Strings.isNullOrEmpty(name.getUri())) { + return name.getLocalName(); + } else { + return "{" + name.getUri() + "}" + name.getLocalName(); + } + + } + @Override public void endElement() { if (elementStack.size() > 1) { 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 1ce5d7d..1b6ee60 100644 --- a/src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/xml/XmlParserTests.java @@ -56,4 +56,11 @@ public class XmlParserTests { new XmlTextNode("Hello!") )))); } + + @Test + public void unmappedNamespaceUrisAreIncludedInBracesAsPrefix() { + assertThat( + XmlParser.parseString("<w:body xmlns:w='word'/>"), + is(new XmlElement("{word}body"))); + } } |
