2010-02-22 21 views
1
允许

我的XML文件是SXXP0003:通过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> 

我使用下面的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> 

它在Sample Java Apllication中运行良好,但是当我试图在基于Spring的应用程序中使用它时,它给出了以下错误。

Error on line 1 column 1 of T0020: 
    SXXP0003: Error reported by XML parser: Content is not allowed in prolog. 

我不知道出了什么问题?请帮帮我。提前致谢。

+0

什么是您正在转换的XML? – Mark 2010-02-22 12:59:23

+0

我可以编辑问题作为另一个问题,我面对xslt我应该包括在这个或写一个单独的问题? – 2010-02-23 09:29:33

+1

呃......如果Larry Shaddon是一个真实的人,你可能想从这里删除他的细节,并从你发布的stylusstudio论坛中删除他的细节。 – Brabster 2010-02-23 09:55:57

回答

1

在XML数据启动之前,文档中有一些内容可能会出现空格(这是我之前见过的)。

序言是开始标记之前文档的一部分,带有类似标记的构造,如<?<!。这些标签之间也可能有一些字符/空格。序言和有效内容在tiztag.com中解释。

也许发布一个非个人化的XML数据示例?

+0

这是转换问题,现在解决了。感谢Respose。 – 2010-02-23 09:27:49

0

如果您尝试处理内容两次,也可以获取此内容。 (这在春天很容易做到。)在这种情况下,你的XML没有问题。这种情况似乎可能是自示例应用程序起作用,但引入spring会导致问题。

+0

谢谢我的问题解决了,它的一种与Spring的转换问题。它解决了很多。 – 2010-02-23 09:26:35

4

您的XML以UTF-8(0xEF,0xBB,0xBF)中的字节顺序标记开头,该字符不可见。尝试用十六进制编辑器打开文件,并看看。

Windows下的许多文本编辑器如AT UTF-8编码的文本开始,要插入此尽管UTF-8实际上并不需要字节的UTF-8的顺序字节顺序标记已经很好定义了。

Java的XML解析器将全部窒息在BOM上,并且显示错误消息。您需要删除BOM,或者为您的InputStream编写一个包装器,以便在解析时为您提供XML解析器。