Note that there are some explanatory texts on larger screens.

plurals
  1. POParsing XML usin SAX in java
    text
    copied!<p>I have this code to parse XML data ..</p> <p>But when startelement and endelement functions are called they don't get the parameters values ( as name parameter don't have any data ) when tying to print the parameters values. it dont't have any value, why ? </p> <p>I call updateArticle function in the following code</p> <pre><code>import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class RSSHandler extends DefaultHandler { // Used to define what elements we are currently in private boolean inItem = false; private boolean inTitle = false; private boolean inLink = false; // Feed and Article objects to use for temporary storage private Article currentArticle = new Article(); private Feed currentFeed = new Feed(); // Number of articles added so far private int articlesAdded = 0; private ArrayList&lt;Article&gt; articles = new ArrayList&lt;Article&gt;(); private ArrayList&lt;Feed&gt; feeds = new ArrayList&lt;Feed&gt;(); // Number of articles to download private static final int ARTICLES_LIMIT = 15; // The possible values for targetFlag private static final int TARGET_FEED = 0; private static final int TARGET_ARTICLES = 1; // A flag to know if looking for Articles or Feed name private int targetFlag; public RSSHandler(){ } public void startElement(String uri, String name, String qName,Attributes atts) { if (name.trim().equals("title")) inTitle = true; else if (name.trim().equals("item")) inItem = true; else if (name.trim().equals("link")) inLink = true; System.out.println(name.trim()); } public void endElement(String uri, String name, String qName)throws SAXException { if (name.trim().equals("title")) inTitle = false; else if (name.trim().equals("item")) inItem = false; else if (name.trim().equals("link")) inLink = false; // Check if looking for feed, and if feed is complete if (targetFlag == TARGET_FEED &amp;&amp; currentFeed.url != null &amp;&amp; currentFeed.title != null) { // We know everything we need to know, so insert feed and exit System.out.println("add current feed"); feeds.add(currentFeed); // throw new SAXException(); } // Check if looking for article, and if article is complete if (targetFlag == TARGET_ARTICLES &amp;&amp; currentArticle.url != null &amp;&amp; currentArticle.title != null) { Article article = new Article(); article.feedId = currentFeed.id; article.title = currentArticle.title; article.url = currentArticle.url; System.out.print(article.title); articles.add(article); //store articles in database currentArticle.title = null; currentArticle.url = null; // Lets check if we've hit our limit on number of articles articlesAdded++; if (articlesAdded &gt;= ARTICLES_LIMIT) throw new SAXException(); } } public ArrayList&lt;Article&gt; getArticles(){ return this.articles; } public ArrayList&lt;Feed&gt; getFeeds(){ return this.feeds; } public void characters(char ch[], int start, int length) { String chars = (new String(ch).substring(start, start + length)); System.out.println(chars); try { // If not in item, then title/link refers to feed if (!inItem) { if (inTitle) currentFeed.title = chars; } else { if (inLink) currentArticle.url = new URL(chars); if (inTitle) currentArticle.title = chars; } } catch (MalformedURLException e) { } } public void createFeed(URL url) { try { targetFlag = TARGET_FEED; currentFeed.url = url; SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(this); xr.parse(new InputSource(url.openStream())); } catch (IOException e) {} catch (SAXException e) {} catch (ParserConfigurationException e) {} } public void updateArticles(Feed feed) { try { targetFlag = TARGET_ARTICLES; currentFeed = feed; System.out.println(feed.url.toString()); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(this); xr.parse(new InputSource(currentFeed.url.openStream())); } catch (IOException e) {} catch (SAXException e) {} catch (ParserConfigurationException e) {} } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload