嵌套HTML span元素的转换

时间:2016-09-07 08:39:37

标签: html xslt-1.0

我们正在尝试使用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>

似乎条件已执行,但占位符未执行或以某种方式被覆盖;基本上,占位符跨度元素不会被替换。

有没有人对此有解释,我们做错了什么?

谢谢!

1 个答案:

答案 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>

我只是重新应用节点而不是获取当前文本。