如果另一个节点为空,如何更改XML中的节点值

时间:2016-11-29 17:13:32

标签: xml xslt

我在WS

中有以下回复
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="XX" xmlns:ns2="XX">
    <SOAP-ENV:Body>
        <ns2:entregarManifestacaoProcessualResposta>
            <ns1:sucesso>true</ns1:sucesso>
            <ns1:mensagem>Some strange error messafe</ns1:mensagem>
            <ns1:protocoloRecebimento>XXXXXXXX</ns1:protocoloRecebimento>
            <ns1:dataOperacao>XXXXXXX</ns1:dataOperacao>
            <ns1:recibo/>
        </ns2:entregarManifestacaoProcessualResposta>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

根据所表达的合同,它们尚未实施,在这种情况下,成功必须为假,因为标记<ns1:recibo>为空。

所以我需要创建一个XSLT来检查recibo是否为空,并将sucesso节点更改为false。

我已经开始使用下面的示例了,我在SO中找到了这个示例,但是当我尝试更改sucesso节点时,它永远不会改变。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Envelope/Body/sucesso">
    <sucesso>false</sucesso>
  </xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

  

我需要创建一个XSLT来检查recibo是否为空并更改   sucesso节点为false。

以这种方式尝试:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns2="XX">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="ns2:sucesso[not(../ns2:recibo/text())]">
    <xsl:copy>false</xsl:copy>
</xsl:template>

</xsl:stylesheet>