diff options
5 files changed, 47 insertions, 8 deletions
diff --git a/src/de/podfetcher/syndication/handler/HandlerState.java b/src/de/podfetcher/syndication/handler/HandlerState.java index 159f646f5..9eccf4f74 100644 --- a/src/de/podfetcher/syndication/handler/HandlerState.java +++ b/src/de/podfetcher/syndication/handler/HandlerState.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Stack; import de.podfetcher.syndication.namespace.Namespace; +import de.podfetcher.syndication.namespace.SyndElement; import de.podfetcher.feed.Feed; import de.podfetcher.feed.FeedItem; @@ -13,13 +14,13 @@ public class HandlerState { /** Feed that the Handler is currently processing. */ protected Feed feed; protected FeedItem currentItem; - protected Stack<String> tagstack; + protected Stack<SyndElement> tagstack; /** Namespaces that have been defined so far. */ protected HashMap<String, Namespace> namespaces; public HandlerState(Feed feed) { this.feed = feed; - tagstack = new Stack<String>(); + tagstack = new Stack<SyndElement>(); namespaces = new HashMap<String, Namespace>(); } @@ -30,7 +31,7 @@ public class HandlerState { public FeedItem getCurrentItem() { return currentItem; } - public Stack<String> getTagstack() { + public Stack<SyndElement> getTagstack() { return tagstack; } diff --git a/src/de/podfetcher/syndication/handler/RSSHandler.java b/src/de/podfetcher/syndication/handler/RSSHandler.java index f750b0a92..5a61b9daa 100644 --- a/src/de/podfetcher/syndication/handler/RSSHandler.java +++ b/src/de/podfetcher/syndication/handler/RSSHandler.java @@ -6,6 +6,7 @@ import de.podfetcher.feed.Feed; import de.podfetcher.feed.FeedImage; import de.podfetcher.feed.FeedItem; import de.podfetcher.feed.FeedMedia; +import de.podfetcher.syndication.namespace.SyndElement; import org.xml.sax.Attributes; import org.xml.sax.SAXException; @@ -42,9 +43,10 @@ public class RSSHandler extends SyndHandler { throws SAXException { if (state.tagstack.size() >= 2) { String content = new String(ch, start, length); - String top = state.tagstack.pop(); - String second = state.tagstack.peek(); - state.tagstack.push(top); + SyndElement topElement = state.tagstack.pop(); + String top = topElement.getName(); + String second = state.tagstack.peek().getName(); + state.tagstack.push(topElement); if (top.equals(TITLE)) { if (second.equals(ITEM)) { state.currentItem.setTitle(content); diff --git a/src/de/podfetcher/syndication/handler/SyndHandler.java b/src/de/podfetcher/syndication/handler/SyndHandler.java index 9ee604244..4fc47fb63 100644 --- a/src/de/podfetcher/syndication/handler/SyndHandler.java +++ b/src/de/podfetcher/syndication/handler/SyndHandler.java @@ -8,6 +8,7 @@ import android.util.Log; import de.podfetcher.feed.Feed; import de.podfetcher.syndication.namespace.Namespace; +import de.podfetcher.syndication.namespace.SyndElement; import de.podfetcher.syndication.namespace.atom.NSAtom; /** Superclass for all SAX Handlers which process Syndication formats */ @@ -22,7 +23,7 @@ public abstract class SyndHandler extends DefaultHandler{ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - state.tagstack.push(qName); + state.tagstack.push(new SyndElement(qName)); String[] parts = qName.split(":"); String prefix = ""; diff --git a/src/de/podfetcher/syndication/namespace/NSElement.java b/src/de/podfetcher/syndication/namespace/NSElement.java index c13cb0dec..5bfeae212 100644 --- a/src/de/podfetcher/syndication/namespace/NSElement.java +++ b/src/de/podfetcher/syndication/namespace/NSElement.java @@ -6,7 +6,20 @@ import de.podfetcher.feed.Feed; import de.podfetcher.syndication.handler.HandlerState; /** Defines a XML Element of a specific namespace */ -public abstract class NSElement { +public abstract class NSElement extends SyndElement{ + protected Namespace namespace; + + public NSElement(String name, Namespace namespace) { + super(name); + this.namespace = namespace; + } + /** Called by its namespace if the processing of the element gets more complex */ public abstract void handleElement(String localName, HandlerState state, Attributes attributes); + + @Override + public Namespace getNamespace() { + return namespace; + } + } diff --git a/src/de/podfetcher/syndication/namespace/SyndElement.java b/src/de/podfetcher/syndication/namespace/SyndElement.java new file mode 100644 index 000000000..e4d250f0b --- /dev/null +++ b/src/de/podfetcher/syndication/namespace/SyndElement.java @@ -0,0 +1,22 @@ +package de.podfetcher.syndication.namespace; + +/** Defines a XML Element that is pushed on the tagstack */ +public class SyndElement { + protected String name; + + + public SyndElement(String name) { + super(); + this.name = name; + } + + public Namespace getNamespace() { + return null; + } + + public String getName() { + return name; + } + + +} |