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

2022-08-31 19:59:54

我正在用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文件的序言中没有无效的内容。我不知道出了什么问题。请帮忙。谢谢。


答案 1

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

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

答案 2

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

将文档类型从“以 UTF-8 编码”更改为“以不含 BOM 的 UTF-8 编码”

我通过执行相同的更改解决了我的问题。


推荐