XML中多个具有相同名称的元素,并且仅希望使用xslt根据一种条件更改一个特定元素的值

时间:2018-12-21 14:18:37

标签: xml xslt

输入XML

<?xml version="1.0"?>
<Response>
  <TroubleResponse>
    <Check>
      <DStatus>
        <GID>123456789</GID>
        <FLAG/>
      </DStatus>
      <DStatus>
        <GID>222233333</GID>
        <FLAG/>
      </DStatus>
      <DStatus>
        <GID>5555777788</GID>
        <FLAG/>
      </DStatus>
    </Check>
    <RAM>
      <Details>
        <RAMID>5555777788</RAMID>
      </Details>
    </RAM>
  </TroubleResponse>
</Response>

我的问题是:
我想将元素标志值更新为TRUE,其中元素RAMID值与元素GID值匹配。

如何使用XSLT实现呢?

1 个答案:

答案 0 :(得分:0)

与此模板结合使用身份模板

<xsl:template match="FLAG[../GID = ../../../RAM/Details/RAMID]">
    <xsl:copy>TRUE</xsl:copy>
</xsl:template>

XSLT-1.0的身份模板是

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

两者的结合达到了预期的结果。
如果您可以使用XSLT-2.0或更高版本,则可以将身份模板替换为

<xsl:mode on-no-match="shallow-copy"/>