此xsl:apply-templates指令:
<xsl:if test="$item/tcm:Content/em:Office/em:Address">
<address>
<xsl:apply-templates mode="renderhtml" select="$item/tcm:Content/em:Office/em:Address/node()" />
</address>
</xsl:if>产生:
<p>
My Office Address
<br />XXXX Road
<br />XXXX District
<br />XXXX, XXXX.
<br />PO Box XXXX
</p>现在,我希望将生成的html存储在一个变量中,然后调用另一个模板,将第一个<p>元素替换为<p property="v:street-address">,这样最终结果将是:
<p property="v:street-address">
My Office Address
<br />XXXX Road
<br />XXXX District
<br />XXXX, XXXX.
<br />PO Box XXXX
</p>请推荐!!
谢谢
发布于 2013-02-10 22:08:50
在XSLT1.0中,只有在使用支持the node-set() function的处理器时,才能捕获输出并将模板应用于该输出。假设你是,你可以这样做:
<xsl:if test="$item/tcm:Content/em:Office/em:Address">
<address>
<xsl:variable name="addressHtml">
<xsl:apply-templates mode="renderhtml"
select="$item/tcm:Content/em:Office/em:Address/node()" />
</xsl:variable>
<xsl:apply-templates select="msxsl:node-set($addressHtml)"
mode="adjustAddressHtml" />
</address>
</xsl:if>
...
<xsl:template match="@* | node()" mode="adjustAddressHtml" name="Identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="adjustAddressHtml" />
</xsl:copy>
</xsl:template>
<xsl:template match="/" mode="adjustAddressHtml">
<xsl:if test="p">
<xsl:call-template name="Identity" />
</xsl:if>
<xsl:if test="not(p)">
<xsl:call-template name="StartingP" />
</xsl:if>
</xsl:template>
<xsl:template match="/p[1]" mode="adjustAddressHtml" name="StartingP">
<p property="v:street-address">
<xsl:apply-templates select="@* | node()" mode="adjustAddressHtml" />
</p>
</xsl:template>发布于 2013-02-11 01:46:25
如果没有源XML文档,就很难给出完整的答案,但是通常可以避免两遍转换的需要。
相反,代码可以像一样简单
某处:
<xsl:apply-templates mode="renderhtml"
select="$item/tcm:Content/em:Office/em:Address/>然后:
<xsl:template match="em:Address" mode="renderhtml">
<address>
<xsl:apply-templates mode="renderhtml" select="node()" />
</address>
</xsl:template>
<xsl:template match="em:Address/node()" mode="renderhtml">
<p>
<xsl:if test="position() = 1">
<xsl:attribute name="property">v:street-address</xsl:attribute>
</xsl:if>
<!-- The code that generates this:
My Office Address
<br />XXXX Road
<br />XXXX District
<br />XXXX, XXXX.
<br />PO Box XXXX
-->
</p>
</xsl:template>https://stackoverflow.com/questions/14797139
复制相似问题