Java解析XML文档给出了“prolog中不允许的内容”。错误

时间:2010-04-08 12:51:27

标签: java xml eclipse xml-parsing

我正在用Java编写一个程序,它接受一个自定义XML文件并解析它。我正在使用XML文件进行存储。我在Eclipse中收到以下错误。

[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
    at     com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283  )
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
    at me.ericso.psusoc.RequirementSatisfier.parseXML(RequirementSatisfier.java:61)
    at me.ericso.psusoc.RequirementSatisfier.getCourses(RequirementSatisfier.java:35)
    at     me.ericso.psusoc.programs.RequirementSatisfierProgram.main(RequirementSatisfierProgram.java:23  )

包含XML文件的开头:

<?xml version="1.0" ?>
<PSU>
     <Major id="IST">
        <name>Information Science and Technology</name>
        <degree>B.S.</degree>
        <option> Information Systems: Design and Development Option</option>
        <requirements>
            <firstlevel type="General_Education" credits="45">
                <component type="Writing_Speaking">GWS</component>
                <component type="Quantification">GQ</component>

程序能够读取XML文件,但是当我调用DocumentBuilder.parse(XMLFile)来获取解析的org.w3c.dom.Document时,我得到上面的错误。

在我看来,我的XML文件的prolog中包含无效内容。我无法弄清楚出了什么问题。请帮忙。感谢。

8 个答案:

答案 0 :(得分:19)

请检查xml文件是否有这样的垃圾字符 。如果存在,请使用以下语法删除它。

String XString = writer.toString();
XString = XString.replaceAll("[^\\x20-\\x7e]", "");

答案 1 :(得分:9)

我认为这也是这个问题的解决方案。

'在UTF-8中编码'更改文档类型到'在没有BOM的UTF-8中编码'

我通过做同样的改变解决了我的问题。

答案 2 :(得分:7)

确保XML文件的开头没有隐藏的空格。也许在节点中包括encoding =“UTF-8”(或16?无线索)。

答案 3 :(得分:3)

该文件对我来说很好,但我怀疑它包含不可见的字符。在十六进制编辑器中打开它以检查在第一个“&lt;”之前确实没有任何内容。确保XML标头中的空格是空格。也许删除“?&gt;”之前的空格。检查使用了哪些换行符。

确保文档是正确的UTF-8。一些Windows编辑器将文档保存为UTF-16(即每隔一个字节为0)。

答案 4 :(得分:1)

我假设你有适当的xml编码并与Schema匹配。

如果仍然出现此错误,请检查解组已使用的xml和输入类型的代码。因为XML文档声明了它们自己的编码,所以最好从InputStream而不是Reader中创建一个StreamSource对象,这样XML处理器就能正确处理声明的编码[Ref Book:Java in A Nutshell]

希望这有帮助!

答案 5 :(得分:1)

您没有为该文件提供正确的地址。您需要提供C:/Users/xyz/Desktop/myfile.xml

等地址

答案 6 :(得分:0)

如果您能够控制xml文件,请尝试在文件开头添加更多信息:

<?xml version="1.0" encoding="UTF-16" standalone="no"?>

答案 7 :(得分:0)

检查XMl文件中的任何语法问题。我在使用Cocoon处理xsl / xsp时发现了这个错误,我使用不存在的节点或类似的东西来定义变量。 检查整个XML。