1

我想将 XML 翻译为 CDATA,使用 XSLT 中介,

在客户端,将以下消息作为应用程序/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 回答
0

那不是问题。您所期望的(即带有 CDATA 标记)和您得到的(即带有“& lt;”)在语义上是相同的。

您可以继续进行而不用担心。

于 2013-07-04T09:44:18.213 回答