SAX Rss解析忽略setLink上的空间

时间:2011-06-09 18:55:34

标签: android xml parsing sax

我已经制作了一个RSS阅读器,可以在小问题上使用一些帮助。当rss XML设置如下:

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

我的读者可以将链接拉好。

但我尝试阅读的一些Feed设置如下:

<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只会拉出空格。有关如何让它跳过空格并在下一行拉链接的任何想法?

2 个答案:

答案 0 :(得分:1)

  1. 创建documentBuilderFactory

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    1. 创建DocumentBuilder
    2. DocumentBuilder builder = factory。 newDocumentBuilder();

      1. 获取输入流 ClassLoader cls = DomReader.class.getClassLoader(); InputStream是= cls.getResourceAsStream(“xml file”);
        1. 解析xml文件并通过调用parse方法获取Document对象 在DocumentBuilder对象上。 Document document = builder.parse(is);
        2. 使用文档对象遍历dom树。 SAX: 简单的xml解析。 它逐节点地解析 遍历从上到下 内存使用率低 使用sax无法返回导航。
      2. //实现必需的处理程序   公共类SaxParse扩展了DefaultHandler {   }   // saxParserFactory的新实例   SAXParserFactory factory = SAXParserFactory.newInstance();  // SAX PARSER的新实例   SAXParser saxparser = factory.newSAXParser();   //解析xml文档  SAXParser.parse(新文件(要解析的文件),新SAXXMLParserImpl());

答案 1 :(得分: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);
  }

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