在xslt中修改未选择的分支

时间:2011-02-15 13:15:43

标签: xslt xslt-1.0

我想修改分支中的节点,具体取决于它的兄弟节点。在以下示例中,如果<var2 Value='D'/>包含<nest2>,我想将nest1添加到预先存在的<var1 Value='A'>

输入:

<variables>
  <nest1>
    <var1 Value='A'/>
    <var1 Value='B'/>
  </nest1>
  <nest2>
    <var2 Value='C'/>
  </nest2>
</variables>

输出

<variables>
  <nest1>
    <var1 Value='A'/>
    <var1 Value='B'/>
  </nest1>
  <nest2>
    <var2 Value='C'/>
    <var2 Value='D'/>
  </nest2>
</variables>

我可以匹配<var1 Value='A'/>,但我不知道如何修改预先存在的<nest2>。我可以匹配<nest2>,但我不知道如何查看<var1 Value='A'/>中是否存在<nest1>。我只是难过从这里去的地方。

我正在使用xslt 1.0。

1 个答案:

答案 0 :(得分:2)

以下是应该完成工作的示例样式表:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes"/>

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

  <xsl:template match="nest2[preceding-sibling::nest1/var1[@Value = 'A']]">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
      <var2 Value="D"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
相关问题