我试图过滤,选择并使用此主要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>
我错过了什么?我无法达到有效载荷元素......
答案 0 :(得分:1)
CDATA表示“字符数据”。这意味着“这里的东西可能看起来像标记,但事实并非如此。”因此,如果你有一个包含CDATA的样式表,并且在CDATA部分内部看起来像xsl:if
指令,那就是一种视错觉:它根本不是一个xsl:if
指令,它只是文本到被复制到结果文档中。
这就解释了为什么你的代码无效。怎么解决?那取决于你知道你想做什么,你没有告诉我们。很难从非工作代码中反向设计您的需求。向我们展示您的预期产量。