JDOM - SaxBuilder - prolog中不允许使用内容

时间:2012-07-09 12:15:49

标签: java jdom

我无法使用SAXBuilder将XML文件解析为JDOM Document实例。

抛出以下异常:

[Fatal Error] :1:1: Content is not allowed in prolog.

我已经在Stack Exchange和Internet上的其他地方找到并读取了所有这些线程,并尝试了各种方法来调试错误。

我最终得到了以下代码片段,它也会抛出。

String template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<server></server>";
InputStream in = new StringBufferInputStream(template);
return saxBuilder.build(in);

它出了什么问题?


我很惭愧地承认,但事实证明,错误不是由我在此处显示的代码段产生的,而是在稍后我使用XMLUnit库将解析的XML与另一个XML进行比较时产生的错误

让我相信错误在所呈现的行中的想法是错误消息的内容。

我认为关闭(并删除,如果可能的话)这个问题是合适的,因为它并不代表任何价值。

2 个答案:

答案 0 :(得分:1)

此错误通常意味着您在xml声明之前有文本。

在你的代码片段中,xml看起来很好。但问题可能不在您的文档中。如果你有一个模式或其他引用的xml文件,那么错误实际上可能是指其中一个。

答案 1 :(得分:1)

我怀疑问题出在其他地方。以下代码(使用dom4j)适用于我:

public static void main(String[] args) throws DocumentException {
    String template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<server></server>";
    SAXReader saxReader = new SAXReader();
    InputStream is = new StringBufferInputStream(template);
    Document document = saxReader.read(is);
    System.out.println(document.asXML());
}

另请注意,StringBufferInputStream已弃用。另一种选择是

        StringReader sr = new StringReader(template);
        Document document = saxReader.read(sr);

因此,问题不在您的XML代码段中,而在saxBuilder.build(...)