转换嵌套的HTML span元素



我们正在尝试使用XSLT将带有占位符的HTML模板转换为最终的HTML。

(简化的)HTML模板看起来像:

<p>
  <span class="condition" id="v6">Some text here
    <span class="placeholder" id="v1" /> 
  </span>
</p>

转换应该

  • 将所有span元素替换为placeholder类;
  • 隐藏或显示每个包含condition类的span元素

(简化的)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>

如果占位符span没有嵌套到条件span中,则一切正常。然而,在上面的HTML示例中,它不起作用,输出是:

<p>Some text here</p>

我们希望它是:

<p>
  Some text here
    replaced       
</p>

似乎条件被执行了,但占位符没有被执行或以某种方式被覆盖;所以基本上,占位符span元素不会被替换。

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

谢谢!

同时找到了一个解决方案:

 <!-- 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>

不使用当前文本,而是重新应用节点

相关内容

  • 没有找到相关文章

最新更新