我有一个名为Products
的部分,其中每个产品都由Text Input
和Multilingual 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的初学者,我的一些概念仍然不太清楚。
答案 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>
这种方法几乎是无限的。