Java SXXP0003:XML 解析器报告的错误:序言中不允许有内容
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2310926/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SXXP0003: Error reported by XML parser: Content is not allowed in prolog
提问by Nisarg Mehta
My XML file is
我的 XML 文件是
<?xml version="1.0" encoding="ISO-8859-1"?>
<T0020
xsi:schemaLocation="http://www.safersys.org/namespaces/T0020V1 T0020V1.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.safersys.org/namespaces/T0020V1">
<INTERFACE>
<NAME>SAFER</NAME>
<VERSION>04.02</VERSION>
</INTERFACE>
<TRANSACTION>
<VERSION>01.00</VERSION>
<OPERATION>REPLACE</OPERATION>
<DATE_TIME>2009-09-01T00:00:00</DATE_TIME>
<TZ>CT</TZ>
</TRANSACTION>
<IRP_ACCOUNT>
<IRP_CARRIER_ID_NUMBER>564182</IRP_CARRIER_ID_NUMBER>
<IRP_BASE_COUNTRY>US</IRP_BASE_COUNTRY>
<IRP_BASE_STATE>AR</IRP_BASE_STATE>
<IRP_ACCOUNT_NUMBER>67432</IRP_ACCOUNT_NUMBER>
<IRP_ACCOUNT_TYPE>I</IRP_ACCOUNT_TYPE>
<IRP_STATUS_CODE>100</IRP_STATUS_CODE>
<IRP_STATUS_DATE>2008-02-01</IRP_STATUS_DATE>
<IRP_UPDATE_DATE>2009-06-18</IRP_UPDATE_DATE>
<IRP_NAME>
<NAME_TYPE>LG</NAME_TYPE>
<NAME>LARRY SHADDON</NAME>
<IRP_ADDRESS>
<ADDRESS_TYPE>PH</ADDRESS_TYPE>
<STREET_LINE_1>10291 HWY 124</STREET_LINE_1>
<STREET_LINE_2/>
<CITY>RUSSELLVILLE</CITY>
<STATE>AR</STATE>
<ZIP_CODE>72802</ZIP_CODE>
<COUNTY>POPE</COUNTY>
<COLONIA/>
<COUNTRY>US</COUNTRY>
</IRP_ADDRESS>
<IRP_ADDRESS>
<ADDRESS_TYPE>MA</ADDRESS_TYPE>
<STREET_LINE_1>10291 HWY124</STREET_LINE_1>
<STREET_LINE_2/>
<CITY>RUSSELLVILLE</CITY>
<STATE>AR</STATE>
<ZIP_CODE>72802</ZIP_CODE>
<COUNTY>POPE</COUNTY>
<COLONIA/>
<COUNTRY>US</COUNTRY>
</IRP_ADDRESS>
</IRP_NAME>
</IRP_ACCOUNT>
</T0020>
I am using following XSLT to split my xml file to multiple xml file .
我正在使用以下 XSLT 将我的 xml 文件拆分为多个 xml 文件。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://www.safersys.org/namespaces/T0020V1" version="2.0">
<xsl:output method="xml" indent="yes" name="xml" />
<xsl:variable name="accounts" select="t:T0020/t:IRP_ACCOUNT" />
<xsl:variable name="size" select="30" />
<xsl:template match="/">
<xsl:for-each select="$accounts[position() mod $size = 1]">
<xsl:variable name="filename" select="resolve-uri(concat('output/',position(),'.xml'))" />
<xsl:result-document href="{$filename}" method="xml">
<T0020>
<xsl:for-each select=". | following-sibling::t:IRP_ACCOUNT[position() < $size]">
<xsl:copy-of select="." />
</xsl:for-each>
</T0020>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
It works well in Sample Java Apllication,but when i tried to use same in my Spring based application then it gives following error .
它在示例 Java 应用程序中运行良好,但是当我尝试在基于 Spring 的应用程序中使用它时,它会出现以下错误。
Error on line 1 column 1 of T0020:
SXXP0003: Error reported by XML parser: Content is not allowed in prolog.
I don't know what goes wrong ? Please help me. Thanks In Advance.
我不知道出了什么问题?请帮我。提前致谢。
回答by brabster
There is some content in the document before the XML data starts, probably whitespace at a guess (that's where I've seen this before).
在 XML 数据开始之前,文档中有一些内容,可能是猜测的空格(这是我以前见过的地方)。
The prolog is the part of the document that is before the opening tag, with tag-like constructs like <?
and <!
. You may have some characters/whitespace in between these tags too. Prologs and valid content are explained on tiztag.com.
序言是文档中开始标记之前的部分,具有类似标记的结构,如<?
和<!
。这些标签之间也可能有一些字符/空格。序言和有效内容在tiztag.com上进行了解释。
Maybe post up an depersonalised example of your XML data?
也许张贴一个非个性化的 XML 数据示例?
回答by Quotidian
It's also possible to get this if you attempt to process the content twice. (Which is fairly easy to do in spring.) In which case, there'd be nothing wrong with your XML. This scenario seems likely since the sample application works, but introducing spring causes problems.
如果您尝试对内容进行两次处理,也有可能获得此信息。(这在春季很容易做到。)在这种情况下,您的 XML 就没有问题。由于示例应用程序可以工作,因此这种情况似乎很可能,但引入 spring 会导致问题。
回答by bendin
Your XML starts with a byte-order markin UTF-8 (0xEF,0xBB,0xBF), which isn't visible. Try opening your file with a hex editor and have a look.
您的 XML以 UTF-8 (0xEF,0xBB,0xBF) 中的字节顺序标记开头,该标记不可见。尝试使用十六进制编辑器打开您的文件并查看。
Many text editors under Windows like to insert this at the start of UTF-8 encoded text, despite the fact that UTF-8 doesn't actually needa byte order mark since the ordering of bytes in UTF-8 is already well defined.
Windows 下的许多文本编辑器喜欢在 UTF-8 编码文本的开头插入它,尽管事实上 UTF-8 实际上并不需要字节顺序标记,因为UTF-8 中的字节顺序已经明确定义。
Java's XML parsers will all choke on a BOM with exactly the error message you are seeing. You'll need to either strip out the BOM, or write a wrapper for your InputStream that you're handing the XML parser to do this for you at parsing time.
Java 的 XML 解析器将完全阻塞在 BOM 上,并显示您所看到的错误消息。您需要去除 BOM,或者为您的 InputStream 编写一个包装器,您将在解析时将其交给 XML 解析器来为您执行此操作。
回答by Saikat
In my case the encoding="UTF-16"
was causing this issue. It got resolved when I changed it to UTF-8
.
在我的情况下,encoding="UTF-16"
导致了这个问题。当我将其更改为UTF-8
.