0

我正在开发一个 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();
    }
}
4

1 回答 1

1

根据 API

参数:

uri - 命名空间 URI,如果元素没有命名空间 URI 或未执行命名空间处理,则为空字符串。

localName - 本地名称(不带前缀),如果未执行命名空间处理,则为空字符串。

...

characters 方法可以在标签内被多次调用,尤其是当元素值包含空格时。

在 characters() 文档中

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

于 2012-05-24T20:24:37.103 回答