避免逃避<和>关于xsl转换

时间:2018-03-06 16:49:58

标签: xml xslt wso2 escaping

我试图过滤,选择并使用此主要xml元素的某些值。

有效负载:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <text xmlns="http://ws.apache.org/commons/ns/payload">
        <xml>
            <resultCode>1</resultCode>
            <descErro>Ops, aconteceu algo errado aqui!  O numA [null] informado pela URA eh nulo e nao eh valido! Favor rever as configuracoes </descErro>
        </xml>
    </text>
</soapenv:Body>

我的XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0"
    xmlns:int="http://ws.apache.org/commons/ns/payload"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:text disable-output-escaping="yes"><![CDATA[
      <result>
         <xsl:if test="soapenv:Envelope/soapenv:Body/text/xml/resultCode = '0'">
            <quote>
               <value>
                  <xsl:value-of select="soapenv:Envelope/soapenv:Body/text/xml/resultCode"/>
               </value>
            </quote>
            <code>
               <xsl:value-of select="soapenv:Envelope/soapenv:Body/text/xml/cota"/>
            </code>
         </xsl:if>
         <xsl:if test="soapenv:Envelope/soapenv:Body/text/xml/resultCode != '0'">
            <code>
               <xsl:value-of select="soapenv:Envelope/soapenv:Body/text/xml/resultCode"/>
            </code>
            <message>
               <xsl:value-of select="soapenv:Envelope/soapenv:Body/text/xml/descErro"/>
            </message>
         </xsl:if>
       </result>]]></xsl:text>
    </xsl:template>
</xsl:transform>

我错过了什么?我无法达到有效载荷元素......

1 个答案:

答案 0 :(得分:1)

CDATA表示“字符数据”。这意味着“这里的东西可能看起来像标记,但事实并非如此。”因此,如果你有一个包含CDATA的样式表,并且在CDATA部分内部看起来像xsl:if指令,那就是一种视错觉:它根本不是一个xsl:if指令,它只是文本到被复制到结果文档中。

这就解释了为什么你的代码无效。怎么解决?那取决于你知道你想做什么,你没有告诉我们。很难从非工作代码中反向设计您的需求。向我们展示您的预期产量。