【问题标题】:Empty uri and localName in DefaultHandlerDefaultHandler 中的空 uri 和 localName
【发布时间】:2012-05-31 11:02:54
【问题描述】:

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

【问题讨论】:

    标签: java rss rss-reader


    【解决方案1】:

    根据 API

    参数:

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

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

    ...

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

    在 characters() 文档中

    解析器会调用这个方法来报告每个字符块 数据。 SAX 解析器可以在单个文件中返回所有连续的字符数据 块,或者他们可能将其分成几个块;然而,所有的 任何单个事件中的角色必须来自同一个外部实体 以便定位器提供有用的信息。

    因此,

    当我编写 SAX 解析器时,我使用 StringBuilder 来附加所有内容 传递给字符():

    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

    【讨论】:

    • 感谢您提供这些信息。相同的提要在 android 项目中可以正常工作,但在经典的 java 项目中则不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2011-11-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多