2011-06-09 42 views
0

我已经做了一个RSS阅读器,并可以在小问题上使用一些帮助。当rss XML被设置为这样:SAX Rss解析忽略setLink上的空间

<link>http://www.grants.gov/search/search.do?mode=VIEW&amp;oppId=98616</link> 

我的读者可以拉链接罚款。

但一些饲料,我想读的设置,如:

<link> 
http://www.ornl.gov/info/ornlreview/v44_1_11/article06.shtml 
</link> 

导致我的读者错过的链接。

我已经缩小问题到:

@Override 
    public void characters(char[] ch, int start, int length) 
     { 
    // TODO Auto-generated method stub 

    String strCharacters = new String(ch,start,length); 
    if (itemFound==true){ 
    // "item" tag found, it's item's parameter 
     switch(currentState){ 
     case state_title: 
      item.setTitle(strCharacters); 
      break; 
     case state_description: 
      item.setDescription(strCharacters); 
      break; 
     case state_link: 
      item.setLink(strCharacters); 
      break; 
     case state_pubdate: 
      item.setPubdate(strCharacters); 
      break; 
     default: 
      break; 
     } 
    } 

的strCharacters拉动当前行中的字符串,但与空间的RSS只是拉空白。任何想法如何让它跳过白色空间并拉下一行的链接?

回答

0

解析器看起来不可思议,而不是尝试这样做:

private StringBuilder builder; 

    @Override 
    public void startDocument() throws SAXException { 
    super.startDocument(); 
    builder = new StringBuilder(); 
    } 

    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException { 
    super.characters(ch, start, length); 
    builder.append(ch, start, length); 
    } 

    public void endElement(String uri, String localName, String name) throws SAXException { 
    if (currentState == state_link) { 
     item.setLink(builder.toString().trim()); 
    } 
    builder.setLength(0); 
    } 

这样,你等到内容被完全消耗,而不是仅仅读一行文本。

+0

builder.append(ch,start,length);导致应用程序崩溃 – chrstahl89 2011-06-09 19:45:00

+0

也许实例化它会有所帮助,呃?我修复了我的代码。 – dmon 2011-06-09 19:49:09

+0

**大拇指**现在更清洁解析..并解决了我的问题非常感谢! – chrstahl89 2011-06-09 19:54:54

1
  1. 创建的DocumentBuilderFactory

    的DocumentBuilderFactory工厂= DocumentBuilderFactory.newInstance();

    1. 创建的DocumentBuilder

    的DocumentBuilder建设者=工厂。 newDocumentBuilder();

    1. 得到输入流 ClassLoader cls = DomReader.class.getClassLoader(); InputStream is = cls.getResourceAsStream(“xml file”);
      1. 解析xml文件并通过调用DocumentBuilder对象上的解析方法 来获取Document对象。 Document document = builder.parse(is);
      2. 使用文档对象遍历dom树。 SAX: 简单的xml解析。 它逐节点解析 遍历从上到下 低内存使用率 使用sax不能返回导航。

    //执行所需的处理程序 公共类SaxParse延伸的SAXParserFactory的 的SAXParserFactory工厂= SAXParserFactory.newInstance()的DefaultHandler { } //新的实例; // SAX PARSER的新实例 SAXParser saxparser = factory.newSAXParser(); //解析xml文档 SAXParser。解析(新的文件(要解析的文件),新的SAXXMLParserImpl());