有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在用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文件的序言中似乎没有无效内容。我想不出是怎么回事。请帮忙。谢谢


共 (6) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

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

  3. # 3 楼答案

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

    String XString = writer.toString();
    XString = XString.replaceAll("[^\\x20-\\x7e]", "");
    
  4. # 4 楼答案

    这份文件在我看来很好,但我怀疑它包含看不见的字符。在十六进制编辑器中打开它,检查在第一个“<;”之前是否真的没有任何内容。确保XML标题中的空格是空格。可能会删除“?>;”之前的空格。检查使用了哪些换行符

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

  5. # 5 楼答案

    我假设您有正确的xml编码并与模式匹配

    如果仍然出现此错误,请检查取消对所使用的xml和输入类型进行打包的代码。因为XML文档声明自己的编码,所以最好从InputStream而不是从读取器创建StreamSource对象,这样XML处理器就可以正确处理声明的编码[Ref Book:Java in a Nutshell]

    希望这有帮助

  6. # 6 楼答案

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