【问题标题】:SAX exception content is not allowed in prolog ( java ) File is OKprolog (java) 文件中不允许 SAX 异常内容正常
【发布时间】:2012-08-19 09:34:40
【问题描述】:

我在使用 JAVA SAX 解析器解析此文件时遇到问题:

http://feeds.escapeartists.net/PodCastle_Main

大多数时候我得到异常: 序言中不允许内容

我用Notepad++查看了文件,prolog还可以,至少我是这么认为的。

许多其他播客提要都可以使用,例如。 http://feeds.feedburner.com/newz-of-the-world

有趣的事情: 播客提要的成功率约为 10%。

有什么建议吗?

br 于尔根

编辑: 有趣的是,我手动下载了文件并将其上传到我自己的网站空间。 - 从那里一切都很好......奇怪

EDIT2:代码

        URL url = new URL(this.urlString);
        _setProxy(); // Set the proxy if needed 
        urlInputStream = url.openConnection().getInputStream();

        spf = SAXParserFactory.newInstance();
        sp = spf.newSAXParser();

        if ( urlInputStream == null) {
            System.out.println("blub blub");
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

        System.out.println ("<<<<"+this.urlString+">>>> :" +  in.readLine() );
        System.out.println ("<<<<"+this.urlString+">>>> :" +  in.readLine() );
        in.close();


        InputStream is = url.openStream();

        try {

        sp.parse(url.toURI().toString(), this);

        } catch (SAXParseException e) {
            System.err.println(e.getMessage());
        }

输出:

>>> :(不可打印的字符) >>> : (不可打印字符)

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:1-Byte-UTF-8-sequence 的字节 1 无效。 ...

sax 解析器的类似异常...

所以问题不是sax,而是数据传输。它的工作时间大约有一半。所有其他 testet .xml 文件都可以工作。

有人知道这个效果吗?

【问题讨论】:

  • 也许您可以发布相关的堆栈跟踪?那里应该有一些有用的东西
  • 哦,这绝对不是 SAX 错误,我已将 SAX 的输入流打印到命令行:不可打印字符
  • 请发布您的代码,这样人们可以看到您是否做错了什么。
  • 谢谢,见上文,我已经添加了代码

标签: java xml feed sax podcast


【解决方案1】:

现在我已经实现了这个解决方法。我认为发布网站的网络服务器有问题

       int TRIES = 10;
        for (int tries = 0; tries < TRIES; tries++) {
            InputStream is = url.openStream();
            try {

                sp.parse(is, this);
                //here succesfull
                tries = TRIES; //break loop

            } catch (SAXParseException e) {
                System.err.println(e.getMessage());
            } catch (MalformedByteSequenceException ex) {
                System.out.println("Connection to " + url.toString() + " failed "+ (tries+1) +" times , trying again... (maximum tries = "+ TRIES +")");
                 Thread.sleep(250);
            }
      }

在 2 或 3 次尝试后,流工作

【讨论】:

    【解决方案2】:

    可能您的文档开头不干净 - 可能是一两个额外的字符意外进入。您应该能够从 SAXException 中提取它反对的行和列。

    【讨论】:

      猜你喜欢
      • 2012-12-22
      • 1970-01-01
      • 2011-06-01
      • 2011-07-23
      • 2016-08-08
      • 2016-09-06
      • 1970-01-01
      • 2012-11-19
      • 2011-10-23
      相关资源
      最近更新 更多