2013-01-08 36 views
0

可能重複:
trying to insert CDATA section into a xml試圖isert CDATA文成XML使用XSLT

我試圖isert成XML,但得到以下錯誤 XSLT錯誤(javax.xml .transform.TransformerException):XML文檔結構必須在同一實體內開始和結束。 線程「main」中的異常java.lang.RuntimeException:XML文檔結構必須在同一個實體中開始和結束。

輸入XML

<Create> 
<requestXml> 
<ISD_XMLGateway> 
    <Entity>HLR_ALC</Entity> 
    <Origin>Comverse One</Origin> 
    <Log_Level>0</Log_Level> 
    <Params> 
    <Param Name="HLR_System" Value="JT"/> 
    <Param Name="HLR_ALC_Command" Value="Send_HLR_Command"/> 
    <Param Name="HLR_Command" Value="CRESBX:MSIN=Start43515213,MODEL=MODEL002,SNBSV=7797098765-TEL;"/> 
    </Params> 
             </ISD_XMLGateway> 
          </requestXml> 
      </Create> 

輸出什麼,我希望是

<Create> 
<requestXml><![CDATA[ 
<ISD_XMLGateway> 
<Entity>HLR_ALC</Entity> 
<Origin>Comverse One</Origin> 
<Log_Level>0</Log_Level> 
<Params> 
    <Param Name="HLR_System" Value="JT"/> 
    <Param Name="HLR_ALC_Command" Value="Send_HLR_Command"/> 
    <Param Name="HLR_Command" Value="CRESBX:MSIN=Start43515213,MODEL=MODEL002,SNBSV=7797098765-TEL;"/> 
    </Params> 
    </ISD_XMLGateway>]]> 
          </requestXml> 
      </Create> 
在XSL

我已經requestXml nodeas後添加兩個文本節點下面 <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>

回答

0

好輸出元素的內容作爲CDATA部分很容易在xsl:outputcdata-section-elements屬性,但你似乎也想將序列號輸入XML的requestXml元素中的節點,形成CDATA部分的內容。要序列化您,您需要檢查您的XSLT處理器是否支持這樣做的擴展,或者您需要使用XSLT 1.0樣式表,例如http://lenzconsulting.com/xml-to-string/上提供的樣式表。

然後,您可以導入樣式表,並用它如下:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:import href="xml-to-string.xsl"/> 

<xsl:output method="xml" cdata-section-elements="requestXml"/> 

<xsl:template match="/"> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="requestXml"> 
    <xsl:copy> 
    <xsl:call-template name="xml-to-string"> 
     <xsl:with-param name="node-set" select="node()"/> 
    </xsl:call-template> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

這樣的輸入

<Create> 
<requestXml> 
<ISD_XMLGateway> 
    <Entity>HLR_ALC</Entity> 
    <Origin>Comverse One</Origin> 
    <Log_Level>0</Log_Level> 
    <Params> 
    <Param Name="HLR_System" Value="JT"/> 
    <Param Name="HLR_ALC_Command" Value="Send_HLR_Command"/> 
    <Param Name="HLR_Command" Value="CRESBX:MSIN=Start43515213,MODEL=MODEL002,SNBSV=7797098765-TEL;"/> 
    </Params> 
             </ISD_XMLGateway> 
          </requestXml> 
      </Create> 

轉化爲結果

<Create> 
<requestXml><![CDATA[ 
<ISD_XMLGateway> 
    <Entity>HLR_ALC</Entity> 
    <Origin>Comverse One</Origin> 
    <Log_Level>0</Log_Level> 
    <Params> 
    <Param Name="HLR_System" Value="JT"/> 
    <Param Name="HLR_ALC_Command" Value="Send_HLR_Command"/> 
    <Param Name="HLR_Command" Value="CRESBX:MSIN=Start43515213,MODEL=MODEL002,SNBSV=7797098765-TEL;"/> 
    </Params> 
             </ISD_XMLGateway> 
          ]]></requestXml> 
      </Create>