【问题标题】:how to solve [org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.]如何解决 [org.xml.sax.SAXParseException;行号:1;列号:1;序言中不能有内容。]
【发布时间】:2017-07-23 09:54:05
【问题描述】:

以下是我的 xml 示例 enter link description here

我的编码是

JAXBContext jaxbContext = JAXBContext.newInstance(NewsMLObj.class);
        SAXParserFactory spf = SAXParserFactory.newInstance();
        XMLReader xr = spf.newSAXParser().getXMLReader();

        // to bypass XML DocType and Entity as Jap did not provide proper XML
        xr.setFeature("http://xml.org/sax/features/validation", false);
        xr.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
        xr.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        xr.setFeature("http://xml.org/sax/features/external-general-entities", false);
        xr.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        xr.setFeature("http://xml.org/sax/features/use-entity-resolver2", false);

        InputSource is = new InputSource(new FileReader(factoryType.serverXML.getInputFile2() + filename));
        SAXSource source = new SAXSource(xr, is);
        out.println("input source=" + is);
        javax.xml.bind.Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        out.println("jaxbUnmarshaller =" + jaxbUnmarshaller);
        NewsMLObj nmo = (NewsMLObj) jaxbUnmarshaller.unmarshal(source);

运行“nmo”时,出现错误“javax.xml.bind.UnmarshalException - 有关联的例外: [org.xml.sax.SAXParseException;行号:1;列号:1;序言中不允许有内容。]"

javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at com.n2n.NekkeiFlashNews.client.imp.PacketToObjectNewsHostServer.processRawNews(PacketToObjectNewsHostServer.java:83)
at com.n2n.NekkeiFlashNews.client.imp.NewsRawFileReceiverThread.run(NewsRawFileReceiverThread.java:57)
at java.lang.Thread.run(Unknown Source)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1;   Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
... 7 more

是我的编码有问题吗?如何解决我的问题?

感谢和最好的问候 沙龙

【问题讨论】:

  • 看起来您的 XML 无效。如果开头有不可打印的字符,请使用十六进制编辑器查看
  • @Jens XML 无效怎么说?
  • 请指教?我该怎么办?
  • 我也有同样的问题。原来 IDE 正在生成带有随机代码的文件。转到 Build**>**Rebuild Project 它会告诉你哪个文件包含错误。如果您有同样的问题,我的是 color.xml,这里的 a link 可能会有所帮助。它对我有用

标签: java xml


【解决方案1】:

错误消息“Prolog 中不允许内容”的出现可能有多种原因。这基本上意味着解析器在成功读取文档中的第一个有意义的内容之前发现了错误。这可能是(正如消息所暗示的那样)因为文档以“

我会先检查一下

new FileReader(factoryType.serverXML.getInputFile2() + filename)

返回可用于读取内容的 Reader,无需将该内容提交给 XML 解析。

【讨论】:

    【解决方案2】:

    看来,您的 xml 文件在序言之前写入了一些数据。 字符串之前应该没有任何内容,看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    

    【讨论】:

    • 我只是在
    • 在这种情况下,您可以尝试过滤掉不属于那里的东西。简单的方法是首先读取字符串,清理它并将其推送到 SAXParser。如果文件太大 - 那么您可以编写自己的过滤流。 math.uni-hamburg.de/doc/java/tutorial/essential/io/…
    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多