我有一个名为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>
它给出:
"长描述"包含无效的XML。返回以下错误:loadXML():实体中未定义值为的命名空间前缀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的初学者,有些概念我还没有很好地理解。
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>
这种方法几乎是无限的。