我正在开发一个RSS阅读器。运行此代码时,localName和uri为空。我正在解析RSS提要。 我正在运行以下代码。相同的代码在另一个Android项目中工作正常。
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
String name;
if (localName == "" ){
name = qName;
}
else{
name = localName;
}
if (name.equalsIgnoreCase("title")) {
currentPost.setTitle(chars.toString());
}
if (name.equalsIgnoreCase("link")) {
currentPost.setLink(chars.toString());
}
if (name.equalsIgnoreCase("content")
&& currentPost.getContent() == null) {
currentPost.setContent(chars.toString());
}
if (name.equalsIgnoreCase("item")) {
currentPost.setFeed(feed);
Posts.Instance().add(currentPost);
currentPost = new Post();
}
}
答案 0 :(得分:1)
根据API
参数:
uri - 名称空间URI,或空字符串 element没有名称空间URI,或者没有执行名称空间处理。
localName - 本地名称(不带前缀),或空 字符串,如果没有执行命名空间处理。
...
和
在a里面,可以多次调用characters方法 tag,特别是如果元素值包含空格。
字符()文档
Parser将调用此方法来报告每个字符块 数据。 SAX解析器可以在单个中返回所有连续的字符数据 大块,或者他们可能将它分成几个块;但是,所有的 任何单个事件中的字符必须来自同一个外部实体 以便定位器提供有用的信息。
因此,
当我编写SAX解析器时,我使用StringBuilder来追加所有内容 传递给characters():
public void characters (char ch[], int start, int length) {
if (buf!=null) {
for (int i=start; i<start+length; i++) {
buf.append(ch[i]);
}
}
}
Then in endElement(), I take the contents of the StringBuilder and do something with it. That way, if the parser calls characters() several times, I don't miss anything.
信用:https://stackoverflow.com/a/7182648/643500和https://stackoverflow.com/a/2838338/643500
修改:: 强>
阅读http://sujitpal.blogspot.com/2008/07/rss-feed-client-in-java.html