致命错误:1:1:prolog中不允许内容

时间:2012-07-20 10:20:57

标签: java xml

我正在使用Java,而我正试图从某些http链接获取XML文档。我正在使用的代码是:

URL url = new URL(link);

HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
Document doc = null;

CountInputStream in = new CountInputStream(url.openStream());
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);

不要注意CountInputStream,它是一些像常规输入流一样的特殊类。

使用上面的代码,我有时会收到错误Fatal Error :1:1: Content is not allowed in prolog。我认为这与xml格式错误有关,但我不知道如何修复它。

6 个答案:

答案 0 :(得分:25)

我正在将我的评论转为答案,因此可以接受并且这个问题不再仍然没有答案。

最可能的原因是格式错误的响应,其中包含初始<?xml …>之前的字符。因此,请查看通过HTTP传输的文档,并在服务器端修复此问题。

答案 1 :(得分:6)

在XML前导码(<?xml ...?>)之前肯定有一些奇怪的字符(例如BOM)或一些空格?

答案 2 :(得分:0)

有人应该将JohannesWeiß的评论标记为这个问题的答案。这正是为什么xml文档不能只在DOM Document类中加载的原因。

http://en.wikipedia.org/wiki/Byte_order_mark

答案 3 :(得分:0)

您似乎忘记在get请求中添加正确的标头(请询问REST API开发人员或您的特定API说明):

HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.header("Accept", "application/xml")
connection.setRequestMethod("GET");
connection.connect();

connection.header("Accept", "application/xml;version=1")

答案 4 :(得分:0)

我为此问题找到的真正解决方案是禁用任何XML格式的后处理器。我添加了一个名为“ jp@gc - XML Format Post Processor”的后处理器,并开始注意到错误“ Fatal Error :1:1: Content is not allowed in prolog

通过禁用,后处理器停止抛出这些错误。

答案 5 :(得分:0)

可能是不支持的文件编码。例如,将其更改为UTF-8。

我已经使用Sublime