0

我希望有人可以就我遇到的 xslt 问题提供一些指导。我将通用 XML 消息接收到代理服务中,然后我需要将 xml 包装在肥皂消息中并将其转发到axis2 jms 服务。

我已经使用 saxon 和 xalan 引擎针对我的 xml 测试了 stylehseet,它们都按预期工作,但 wso2 不会接受它我收到错误 WstxParsingException: String ']]>' not allowed in text content if I have the CDATA section (我需要)。

任何建议将不胜感激谢谢保罗

样式表如下

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"     xmlns:klr="http://klr.com">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" cdata-section-elements="klr:legaldocument"/>
    <xsl:template match="/">
        <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:klr="http://klr.com">
            <SOAP-ENV:Body>
                <klr:Hypertext>
                    <klr:legaldocument>
                        <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
                        <xsl:apply-templates select="*"/>
                        <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
                    </klr:legaldocument> 
                 </klr:Hypertext>
            </SOAP-ENV:Body>
        </SOAP-ENV:Envelope>
    </xsl:template>
    <xsl:template match="node()">
        <xsl:element name="{local-name(.)}">
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates select="node()|*"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>
4

1 回答 1

0

只是您的第二个模板不起作用。这是工作完整的样式表:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:klr="http://klr.com">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" cdata-section-elements="klr:legaldocument"/>
    <xsl:template match="/">
        <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:klr="http://klr.com">
            <SOAP-ENV:Body>
                <klr:Hypertext>
                    <klr:legaldocument>
                        <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
                        <xsl:apply-templates select="*"/>
                        <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
                    </klr:legaldocument> 
                </klr:Hypertext>
            </SOAP-ENV:Body>
        </SOAP-ENV:Envelope>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

有关更多信息,请参阅此处的此条目。

于 2012-10-03T07:36:25.550 回答