diff options
Diffstat (limited to 'src/com/isode/stroke/parser/SerializingParser.java')
-rw-r--r-- | src/com/isode/stroke/parser/SerializingParser.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/com/isode/stroke/parser/SerializingParser.java b/src/com/isode/stroke/parser/SerializingParser.java new file mode 100644 index 0000000..1346dc8 --- /dev/null +++ b/src/com/isode/stroke/parser/SerializingParser.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.parser; + +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLTextNode; +import java.util.Vector; + +public class SerializingParser { + + private final Vector<XMLElement> elementStack_ = new Vector<XMLElement>(); + private XMLElement rootElement_; + + public void handleStartElement(String tag, String ns, AttributeMap attributes) { + XMLElement element = new XMLElement(tag, ns); + for (String name : attributes.keySet()) { + element.setAttribute(name, attributes.get(name)); + } + + if (elementStack_.isEmpty()) { + rootElement_ = element; + } else { + elementStack_.lastElement().addNode(element); + } + elementStack_.add(element); + } + + public void handleEndElement(String tag, String ns) { + assert (!elementStack_.isEmpty()); + elementStack_.remove(elementStack_.size() - 1); + } + + public void handleCharacterData(String data) { + if (!elementStack_.isEmpty()) { + elementStack_.lastElement().addNode(new XMLTextNode(data)); + } + } + + public String getResult() { + return (rootElement_ != null ? rootElement_.serialize() : ""); + } +} |