53

我正在用 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)parsedorg.w3c.dom.Document时,我得到了上面的错误。

在我看来,我的 XML 文件的序言中没有无效内容。我不知道出了什么问题。请帮忙。谢谢。

4

8 回答 8

22

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

String XString = writer.toString();
XString = XString.replaceAll("[^\\x20-\\x7e]", "");
于 2012-04-19T14:03:09.207 回答
10

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

将文档类型从“以 UTF-8 编码”更改为“以 UTF-8编码而不使用 BOM”

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

于 2012-11-01T12:08:18.587 回答
7

确保 XML 文件的开头没有隐藏的空格。也可能在节点中包含 encoding="UTF-8" (或 16?没有线索)。

于 2010-04-08T12:57:58.620 回答
3

该文档对我来说看起来不错,但我怀疑它包含不可见的字符。在十六进制编辑器中打开它,检查第一个“<”之前是否真的没有任何内容。确保 XML 标头中的空格是空格。也许删除“?>”之前的空格。检查使用了哪些换行符。

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

于 2010-04-08T12:56:48.277 回答
1

我假设您有正确的 xml 编码并与 Schema 匹配。

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

希望这可以帮助!

于 2012-05-02T04:13:49.373 回答
1

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

于 2012-11-11T22:52:11.523 回答
0

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

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
于 2010-04-08T16:22:41.663 回答
0

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

于 2010-04-08T16:29:42.860 回答