diff options
Diffstat (limited to 'server/src/org/jsoup/parser/XmlTreeBuilder.java')
-rw-r--r-- | server/src/org/jsoup/parser/XmlTreeBuilder.java | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/server/src/org/jsoup/parser/XmlTreeBuilder.java b/server/src/org/jsoup/parser/XmlTreeBuilder.java index 3f03ad26ac..c2a3635b3d 100644 --- a/server/src/org/jsoup/parser/XmlTreeBuilder.java +++ b/server/src/org/jsoup/parser/XmlTreeBuilder.java @@ -1,43 +1,49 @@ package org.jsoup.parser; -import org.jsoup.helper.Validate; -import org.jsoup.nodes.*; - import java.util.Iterator; +import org.jsoup.helper.Validate; +import org.jsoup.nodes.Comment; +import org.jsoup.nodes.DocumentType; +import org.jsoup.nodes.Element; +import org.jsoup.nodes.Node; +import org.jsoup.nodes.TextNode; + /** * @author Jonathan Hedley */ public class XmlTreeBuilder extends TreeBuilder { @Override - protected void initialiseParse(String input, String baseUri, ParseErrorList errors) { + protected void initialiseParse(String input, String baseUri, + ParseErrorList errors) { super.initialiseParse(input, baseUri, errors); - stack.add(doc); // place the document onto the stack. differs from HtmlTreeBuilder (not on stack) + stack.add(doc); // place the document onto the stack. differs from + // HtmlTreeBuilder (not on stack) } @Override protected boolean process(Token token) { // start tag, end tag, doctype, comment, character, eof switch (token.type) { - case StartTag: - insert(token.asStartTag()); - break; - case EndTag: - popStackToClose(token.asEndTag()); - break; - case Comment: - insert(token.asComment()); - break; - case Character: - insert(token.asCharacter()); - break; - case Doctype: - insert(token.asDoctype()); - break; - case EOF: // could put some normalisation here if desired - break; - default: - Validate.fail("Unexpected token type: " + token.type); + case StartTag: + insert(token.asStartTag()); + break; + case EndTag: + popStackToClose(token.asEndTag()); + break; + case Comment: + insert(token.asComment()); + break; + case Character: + insert(token.asCharacter()); + break; + case Doctype: + insert(token.asDoctype()); + break; + case EOF: // could put some normalisation here if desired + break; + default: + Validate.fail("Unexpected token type: " + token.type); } return true; } @@ -48,13 +54,15 @@ public class XmlTreeBuilder extends TreeBuilder { Element insert(Token.StartTag startTag) { Tag tag = Tag.valueOf(startTag.name()); - // todo: wonder if for xml parsing, should treat all tags as unknown? because it's not html. + // todo: wonder if for xml parsing, should treat all tags as unknown? + // because it's not html. Element el = new Element(tag, baseUri, startTag.attributes); insertNode(el); if (startTag.isSelfClosing()) { tokeniser.acknowledgeSelfClosingFlag(); - if (!tag.isKnownTag()) // unknown tag, remember this is self closing for output. see above. + if (!tag.isKnownTag()) { tag.setSelfClosing(); + } } else { stack.add(el); } @@ -72,14 +80,15 @@ public class XmlTreeBuilder extends TreeBuilder { } void insert(Token.Doctype d) { - DocumentType doctypeNode = new DocumentType(d.getName(), d.getPublicIdentifier(), d.getSystemIdentifier(), baseUri); + DocumentType doctypeNode = new DocumentType(d.getName(), + d.getPublicIdentifier(), d.getSystemIdentifier(), baseUri); insertNode(doctypeNode); } /** - * If the stack contains an element with this tag's name, pop up the stack to remove the first occurrence. If not - * found, skips. - * + * If the stack contains an element with this tag's name, pop up the stack + * to remove the first occurrence. If not found, skips. + * * @param endTag */ private void popStackToClose(Token.EndTag endTag) { @@ -94,8 +103,9 @@ public class XmlTreeBuilder extends TreeBuilder { break; } } - if (firstFound == null) + if (firstFound == null) { return; // not found, skip + } it = stack.descendingIterator(); while (it.hasNext()) { |