DefaultHandler中的空uri和localName

时间:2012-05-24 20:15:29

标签: java rss rss-reader

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

1 个答案:

答案 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/643500https://stackoverflow.com/a/2838338/643500

修改::

阅读http://sujitpal.blogspot.com/2008/07/rss-feed-client-in-java.html