我正在使用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格式错误有关,但我不知道如何修复它。
答案 0 :(得分:25)
我正在将我的评论转为答案,因此可以接受并且这个问题不再仍然没有答案。
最可能的原因是格式错误的响应,其中包含初始<?xml …>
之前的字符。因此,请查看通过HTTP传输的文档,并在服务器端修复此问题。
答案 1 :(得分:6)
在XML前导码(<?xml ...?>
)之前肯定有一些奇怪的字符(例如BOM)或一些空格?
答案 2 :(得分:0)
有人应该将JohannesWeiß的评论标记为这个问题的答案。这正是为什么xml文档不能只在DOM Document类中加载的原因。
答案 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