可能重复:
尝试在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"><![CDATA[</xsl:text>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
这个页面似乎有你想要的答案:http://www.bernzilla.com/2008/02/12/utilizing-cdata-section-elements-in-xsl/
你有没有试过我为你这个问题的另一种表述提出的解决方案?我想替换>与>;对于我的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>