SXXP0003: XML解析器报告的错误:在prolog中不允许有内容

时间:2023-01-15 07:25:35

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() &lt; $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.

我不知道哪里出了问题?请帮助我。提前谢谢。

3 个解决方案

#1


4  

Your XML starts with a byte-order mark in 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 need a 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,或者为您正在交付的XML解析器的InputStream编写一个包装器,以便在解析时为您完成这项工作。

#2


1  

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.

prolog是文档的一部分,在开始标记之前,使用像

Maybe post up an depersonalised example of your XML data?

可能会发布一个非个性化的XML数据示例?

#3


0  

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会导致问题。

#1


4  

Your XML starts with a byte-order mark in 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 need a 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,或者为您正在交付的XML解析器的InputStream编写一个包装器,以便在解析时为您完成这项工作。

#2


1  

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.

prolog是文档的一部分,在开始标记之前,使用像

Maybe post up an depersonalised example of your XML data?

可能会发布一个非个性化的XML数据示例?

#3


0  

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会导致问题。