我尝试使用SAX解析器从URL返回RSS源的内容 - http://pitchfork.com/rss/news/,但是在显示标题,显示部分文本或仅显示部分文本时,通常会丢失字符关闭标签">"
如何修改我的处理程序类以防止这种情况?我想我应该使用StringBuilder或StringBuffer,但我不确定如何实现它。
ParseHandler.java
t()
答案 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;
}
}