我们正在尝试使用XSLT将带有占位符的HTML模板转换为最终的HTML。
(简化)HTML模板如下所示:
<p>
<span class="condition" id="v6">Some text here
<span class="placeholder" id="v1" />
</span>
</p>
转型应该
span
类替换每个placeholder
元素; span
类condition
元素
我们的(简化)XSLT是:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:local="urn:local"
xmlns:s0="http://www.w3.org/1999/xhtml">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<!-- Take the HTML template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--Replace every placeholder in the HTML template with the value from the XML data-->
<xsl:template match="span[@class='placeholder']">
<xsl:variable name="this" select="current()/@id"/>
<xsl:value-of select="'replaced'" />
</xsl:template>
<!-- Handle conditions based on custom logic -->
<xsl:template match="span[@class='condition']">
<xsl:variable name="this" select="current()/@id"/>
<xsl:if test="$this = 'v6'">
<xsl:value-of select="current()" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
如果占位符跨度未嵌套到条件范围内,则一切正常。但是,在上面的HTML示例中,它不起作用,输出为:
<p>Some text here</p>
我们希望它是:
<p>
Some text here
replaced
</p>
似乎条件已执行,但占位符未执行或以某种方式被覆盖;基本上,占位符跨度元素不会被替换。
有没有人对此有解释,我们做错了什么?
谢谢!
答案 0 :(得分:0)
同时找到了解决方案:
<!-- Handle conditions based on custom logic -->
<xsl:template match="span[@class='condition']">
<xsl:variable name="this" select="current()/@id"/>
<xsl:if test="$this = 'v6'">
<xsl:apply-templates select="node()"/> <<<<----------------
</xsl:if>
</xsl:template>
我只是重新应用节点而不是获取当前文本。