我对Xslt mod有疑问。我需要将每个第3个div的div类从“clmn-3 doublespace”更改为“clmn-3”。尝试了几个提示,但无法理解在哪里添加参数。
<div class="clmn-9 products">
<h1>Title</h1>
<xsl:if test="$mode = 'edit'">
<xsl:text disable-output-escaping="yes"><![CDATA[<div class="webtop">]]></xsl:text>
</xsl:if>
<xsl:call-template name="ndSitePageList">
<xsl:with-param name="sPgLstID" select="1" />
<xsl:with-param name="customTemplate">
<xsl:for-each select="/ndTemplate/ndSitePageLists/ndList[instanceID=1]/ndSitePage">
<xsl:call-template name="ndReplaceListSitePageElements">
<xsl:with-param name="template">
<xsl:text disable-output-escaping="yes">
<![CDATA[
<div class="clmn-3 doublespace">
<a href="]]></xsl:text><xsl:value-of select="link"/><xsl:text disable-output-escaping="no"> <![CDATA["><img src="]]></xsl:text><xsl:value-of select="/ndTemplate/ndSpgPath"/><xsl:value-of select="srcThumb"/><xsl:text disable-output-escaping="no"><![CDATA["alt="" /></a>
<div class="clmn-3 shadow"></div>
<h2>]]></xsl:text><xsl:value-of select="title"/><xsl:text disable-output-escaping="no"><![CDATA[</h2>
<span class="text">]]></xsl:text><xsl:value-of select="description"/><xsl:text disable-output-escaping="no"><![CDATA[</span>
</div>
]]>
</xsl:text>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</div>
提前谢谢你 亚历
答案 0 :(得分:1)
<强>予。以下是如何在XSLT 1.0中指定此类处理的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pNewValue" select="'someNewAttribValue'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="num[position() mod 3 = 1]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="class"><xsl:value-of select="$pNewValue"/></xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下XML文档时(问题中未提供任何内容!):
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
需要的正确结果(每三个num
元素都有一个class
属性,其中包含一个外部参数中指定的值):
<nums>
<num class="someNewAttribValue">01</num>
<num>02</num>
<num>03</num>
<num class="someNewAttribValue">04</num>
<num>05</num>
<num>06</num>
<num class="someNewAttribValue">07</num>
<num>08</num>
<num>09</num>
<num class="someNewAttribValue">10</num>
</nums>
<强> II。 XSLT 2.0解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pNewValue" select="'someNewAttribValue'"/>
<xsl:template match="/*">
<nums>
<xsl:for-each-group select="*" group-adjacent="position() mod 3 eq 1">
<xsl:sequence select="current-group()[not(current-grouping-key())]"/>
<xsl:apply-templates select="current-group()[current-grouping-key()]"/>
</xsl:for-each-group>
</nums>
</xsl:template>
<xsl:template match="num">
<num class="{$pNewValue}"/>
</xsl:template>
</xsl:stylesheet>
当在同一个XML文档(上面)上应用此XSLT 2.0转换时,会生成相同的想要的正确结果:
<nums>
<num class="someNewAttribValue"/>
<num>02</num>
<num>03</num>
<num class="someNewAttribValue"/>
<num>05</num>
<num>06</num>
<num class="someNewAttribValue"/>
<num>08</num>
<num>09</num>
<num class="someNewAttribValue"/>
</nums>