我想修改分支中的节点,具体取决于它的兄弟节点。在以下示例中,如果<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。
答案 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>