1

XML を CDATA として変換したい、XSLT メディエーターを使用する、

クライアントで、以下のメッセージを application/xml として送信し、

<users>
  <user>
    <name>user-1</name>
    <sex>M</sex>
    <job>DBA</job>
  </user>
  <user>
    <name>user-2</name>
    <sex>F</sex>
    <job>BPMS</job>
  </user>
</users>

プロキシサービスで、

<inSequence xmlns="http://ws.apache.org/ns/synapse">
   <xslt key="test_xslt"/>
   <log level="full">
      <property name="text" value="===================="/>
   </log>
</inSequence>

およびローカル エントリ「test_xslt」の XSLT、

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="/"> 
      <body xmlns="http://ws.apache.org/ns/synapse">
        <op_test_xml_parm>
          <clob_xml>
            <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
            <xsl:copy-of select="/"/>
            <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
          </clob_xml>
        </op_test_xml_parm>
      </body>
    </xsl:template>
</xsl:stylesheet>

しかし、出力:

[2013-07-03 18:30:42,998]  INFO - LogMediator To: /services/test_xslt, MessageID: urn:uuid:7dff989b-7dc1-41b4-8826-55685009d4b5, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><body xmlns="http://ws.apache.org/ns/synapse">
   <op_test_xml_parm>
      <clob_xml>&lt;users xmlns="">
            &lt;user>
               &lt;name>user-1&lt;/name>
               &lt;sex>M&lt;/sex>
               &lt;job>DBA&lt;/job>
            &lt;/user>
            &lt;user>
               &lt;name>user-2&lt;/name>
               &lt;sex>F&lt;/sex>
               &lt;job>BPMS&lt;/job>
            &lt;/user>
         &lt;/users></clob_xml>
   </op_test_xml_parm>
</body></soapenv:Body></soapenv:Envelope>
[2013-07-03 18:30:43,005]  INFO - LogMediator text = ====================

私が期待する結果は次のとおりです。

<body xmlns="http://ws.apache.org/ns/synapse">
   <op_test_xml_parm>
      <clob_xml><![CDATA[<users xmlns="">
            <user>
               <name>user-1</name>
               <sex>M</sex>
               <job>DBA</job>
            </user>
            <user>
               <name>user-2</name>
               <sex>F</sex>
               <job>BPMS</job>
            </user>
         </users>]]></clob_xml>
   </op_test_xml_parm>
</body>

誰かがそれを修正する方法を手伝ってくれるなら。

4

2 に答える 2

0

xslt スクリプトに問題があります。xslt を使用して cdata を挿入する方法に関するリソースが多数あります。それらを確認できます。

于 2013-07-03T15:18:50.950 に答える