0

重複の可能性:
CDATAセクションをxmlに挿入しようとしています

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ノードの後に​​2つのテキストノードを追加しました <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>

4

2 に答える 2

0

このページには、探している答えがあるようです: http://www.bernzilla.com/2008/02/12/utilizing-cdata-section-elements-in-xsl/

この質問の他の定式化のために私が提案した解決策を試しましたか? > を > に置き換えたい xsltを使用してxml内のいくつかのノードに対して

于 2013-01-08T10:57:22.013 に答える
0

要素のコンテンツを CDATA セクションとして出力することは、cdata-section-elements属性をオンにすると簡単ですが、入力 XML の要素xsl:output内のノードをシリアル化して、CDATA セクションのコンテンツを形成することも必要なようです。requestXmlシリアル化するには、XSLT プロセッサがそれを行う拡張機能をサポートしているかどうかを確認するか、http://lenzconsulting.com/xml-to-string/で提供されているような、それを行う XSLT 1.0 スタイルシートを使用する必要があります。

次に、そのスタイルシートをインポートして、次のように使用できます。

<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>
于 2013-01-08T13:12:37.633 に答える