如何在Symphony CMS中的XML中使用XSL

时间:2015-04-03 23:32:14

标签: xml xslt symphony-cms

我有一个名为Products的部分,其中每个产品都由Text InputMultilingual Text Box定义。我创建了100多种带有自定义描述的产品。在某些时候,我需要将当前年份放在Multilingual Text Box

Lorem ipsum dolor <xsl:value-of select="$this-year" /> ipsum <a href="{$root}">Link to root</a>

给出:

  

&#39;长描述&#39;包含无效的XML。返回以下错误:loadXML():在实体中未定义值-of上的命名空间前缀xsl

或者我想从数据源打印数据:

Lorem ipsum
<xsl:variable name="products" select="/data/products" />
<xsl:for-each select="$products">
    //... do other XSL stuff in XML
</xsl:for-each>

当然也会导致错误。

请注意我是Symphony / XSLT的初学者,我的一些概念仍然不太清楚。

1 个答案:

答案 0 :(得分:1)

Symphony社区帮助我解决了这个问题,所以让我引用 jonmifsud

  

最简单的方法是使用所谓的XSLT忍者技术。最简单的方法(...)是创建要替换的html标签。例如,我们可以要求他在要显示年份变量的文本中输入<this-year/>,这意味着当您输出正在使用<xsl:apply-template select=‘your-text’ mode=‘html'/>的文本时。现在使用XSLT的技巧如下:您需要匹配为变量创建的新“标记”,并将其替换为您想要的值

实施例

<xsl:template match="this-year" mode="html">
    <xsl:value-of select="/data/params/this-year">
</xsl:template>

<xsl:template match="*" mode="html">
    <xsl:element name="{name()}">
        <xsl:apply-templates select="* | @* | text()" mode="html"/>
    </xsl:element>
</xsl:template>

<xsl:template match="@*" mode="html">
    <xsl:attribute name="{name()}">
        <xsl:value-of select="."/>
    </xsl:attribute>
</xsl:template>

这种方法几乎是无限的。