需要在'dyn'下的每个嵌套'dn'元素中添加带有颜色名称@color属性



我需要在每个嵌套的'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子。

相关内容

  • 没有找到相关文章

最新更新