尝试使用xslt将CDATA文本转换为xml



可能重复:
尝试在xml 中插入CDATA部分

我正试图插入xml,但出现以下错误XSLT错误(javax.xml.transform.TransferException(: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节点之后添加了两个文本节点,如下所示<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>

这个页面似乎有你想要的答案:http://www.bernzilla.com/2008/02/12/utilizing-cdata-section-elements-in-xsl/

你有没有试过我为你这个问题的另一种表述提出的解决方案?我想替换>与&gt;对于我的xml中的一些节点,使用xslt

使用xsl:output上的cdata-section-elements属性可以很容易地将元素的内容输出为CDATA部分,但您似乎还希望在输入XML中序列化requestXml元素内部的节点,以形成CDATA部分的内容。要进行序列化,您需要检查XSLT处理器是否支持这样做的扩展,或者需要使用XSLT1.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>

最新更新