首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAXparser的问题

SAXparser的问题
EN

Stack Overflow用户
提问于 2012-09-14 18:29:19
回答 3查看 551关注 0票数 0

我已经在我的应用程序中实现了一个SAXparser,它以前工作得很好,但是我在使用新的XML文档时遇到了问题。

这是我的解析器

代码语言:javascript
复制
public List<Article> getLatestArticles(String feedUrl) {
URL url = null;
    try {

        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        url = new URL(feedUrl);

        xr.setContentHandler(this);
        xr.parse(new InputSource(url.openStream()));


    } catch (IOException e) {
        Log.e("RSS Handler IO", e.getMessage() + " >> " + e.toString());
    } catch (SAXException e) {
        Log.e("RSS Handler SAX", e.toString());
    } catch (ParserConfigurationException e) {
        Log.e("RSS Handler Parser Config", e.toString());
    }
    catch (java.lang.IllegalArgumentException e){
        Log.e("RSS Handler lang", e.getMessage() + " >> " + e.toString());
    }

    return articleList;
}

解析器一开始运行正常,但随后我得到了一个java.lang.IllegalArgumentException错误。我相信这可能是由于我的xml提要中的一个元素没有值,它看起来像这样的<Description/>

任何关于如何解决这个问题的建议都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-14 22:26:55

如果</Description>是一个自动结束标记(即它没有开始<Description>标记,也没有文本值),那么这个语法是完全正确的。

如果不查看回调方法(例如startElement方法),就很难确切地说出是什么导致了错误,但是有一个主要的gottcha可以检查

如果InputStream为空,SAX解析方法将抛出illegalArguementException。检查进入SAX解析器的值可能是值得的。

您可以使用以下代码来检查输入流中是否有空值。

代码语言:javascript
复制
InputStreamReader reader = new InputStreamReader(url.openStream());

if (!reader.ready()) {
    System.out.println("error");
}
票数 1
EN

Stack Overflow用户

发布于 2012-09-14 19:10:45

<Description/>是SAXParser的xml构造问题。看一下这个结构。

理想情况下,它应该是</Description>作为结束标记。

对于自动结束标记,SAXParser会将其假定为结束标记。

因此,您将收到来自endElement的调用,而不是startElement

票数 0
EN

Stack Overflow用户

发布于 2012-09-15 15:34:22

连接可能会在所有数据下载之前关闭。尝试使用BufferedInputStream,看看是否有帮助:

代码语言:javascript
复制
BufferedInputStream _url_ = new BufferedInputStream(new URL(feedUrl).openStream());

...

BufferedReader isr = new BufferedReader(new InputStreamReader(_url_));
InputSource is = new InputSource(isr);
xr.parse(is);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12422703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档