2

我有一个名为的部分Products,其中每个产品都由Text Inputand定义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(): Namespace prefix xsl on value-of is not defined in Entity

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

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 的初学者,有些概念我仍然不太了解。

4

1 回答 1

1

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

最简单的方法是使用所谓的 XSLT ninja 技术。最简单的方法(...)是创建要替换的 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>

这种方法几乎是无限的。

于 2015-04-04T12:56:21.773 回答