RSS阅读器使用Sax Parser从标题中丢失角色

时间:2015-08-28 22:39:16

标签: java android xml saxparser rss-reader

我尝试使用SAX解析器从URL返回RSS源的内容 - http://pitchfork.com/rss/news/,但是在显示标题,显示部分文本或仅显示部分文本时,通常会丢失字符关闭标签">"

如何修改我的处理程序类以防止这种情况?我想我应该使用StringBuilder或StringBuffer,但我不确定如何实现它。

ParseHandler.java

t()

1 个答案:

答案 0 :(得分:0)

使用StringBuilder构建标记,而不是使用新的String实例,如文档所示:

  

Parser将调用此方法来报告每个字符数据块。 SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块;但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息。

@CommonWares正好在他的帖子Here.

中说

使用StringBuilder构建您的标记,因为有一个块一次进入而不是整个字符串(这解释了不完整的标记!)。您可能需要也可能不需要isBuilding标志,但我不知道您的整个实现,所以我添加了它。

   StringBuilder mSb;
   boolean isBuilding;

   @Override
   public void startElement(String uri, String localName, String qName,
         Attributes attributes) throws SAXException {

        mSb = new StringBuilder();
        isBuilding = true;

        if(qName.equals("title")){
            parsingTitle = true;
        }
        ...
        ...
    }

    @Override
    public void characters (char ch[], int start, int length) {
        if (mSb !=null && isBuilding) {
            for (int i=start; i<start+length; i++) {
                mSb.append(ch[i]);
            }
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
        throws SAXException {

        if(parsingTitle){
            currentItem.setTitle(sb.toString().trim());
            parsingTitle = false;  
            isBuilding = false;
        }
    }