我需要在每个嵌套的'dn'元素中添加带有颜色名称的@color属性,如果位置是偶数,@color属性到每个级别的第二,第四,第六个等dn子元素,以及dn元素的兄弟元素我尝试用位置函数,但无法得到解决请调查此事并提前致谢
输入XML文件:
<dyn>
<dn></dn>
<dn></dn>
<dn>
<dn></dn>
<dn></dn>
<dn>
<dn></dn>
<dn></dn>
<dn></dn>
</dn>
</dn>
</dyn>
XSLT文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dyn">
<dyn>
<xsl:choose>
<xsl:when test="following::dn/position() mod 2 = 0">
<dn>
<xsl:attribute name="color">
<xsl:value-of select="'red'"/>
</xsl:attribute>
</dn>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
<xsl:apply-templates/>
</dyn>
</xsl:template>
</xsl:stylesheet>
预期输出:
<dyn>
<dn></dn>
<dn color="red"></dn>
<dn>
<dn></dn>
<dn color="red">
</dn>
<dn>
<dn color="red"></dn>
<dn></dn>
<dn color="red"></dn>
<dn>
</dn></dn>
</dn>
</dyn>
你的语言描述听起来好像你想要
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dn[position() mod 2 = 0]">
<xsl:copy>
<xsl:attribute name="color">red</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
输出
<dyn>
<dn/>
<dn color="red"/>
<dn>
<dn/>
<dn color="red"/>
<dn>
<dn/>
<dn color="red"/>
<dn/>
</dn>
</dn>
</dyn>
具有前两个级别的正确属性,但在第三个级别上,它为第二个dn
子提供color="red"
属性,而您想要的输出,由于我到目前为止还不理解的原因,将属性添加到第一个和第三个dn
子。