xslt - 使用 XSLT 匹配不同的节点句柄来获取节点值

标签 xslt matching xslt-1.0 symphony-cms

可用的 XSLT 为 1.0。

我正在基于 XML 的 CMS (Symphony CMS) 中开发双语言网站,需要将英语版本的类别名称替换为法语版本。

这是我的源 XML。

<data>
    <our-news-categories-for-list-fr>
        <entry id="118">
            <title-fr handle="technology">Technologie</title-fr>
        </entry>
        <entry id="117">
            <title-fr handle="healthcare">Santé</title-fr>
        </entry>
    </our-news-categories-for-list-fr>
    <our-news-article-fr>
        <entry id="100">
            <categories>
                <item id="117" handle="healthcare" section-handle="our-news-categories" section-name="Our News categories">Healthcare</item>
                <item id="118" handle="technology" section-handle="our-news-categories" section-name="Our News categories">Technology</item>
            </categories>
            <main-text-fr mode="formatted"><p>Blah blah</p></main-text-fr>
        </entry>
    </our-news-article-fr>
</data>

这是我目前法语版本的 XSLT 的一部分。

<xsl:template match="data">
    <xsl:apply-templates select="our-news-article-fr/entry"/>
</xsl:template>

<xsl:template match="our-news-article-fr/entry">
    <xsl:if test="categories/item">
        <p class="category">In:</p>
        <ul class="category">
            <xsl:for-each select="categories/item">
                <li><a href="{/data/params/root}/{/data/params/root-page}/our-news/categorie/{@handle}/"><xsl:value-of select="."/></a></li>
            </xsl:for-each>
        </ul>
    </xsl:if>
</xsl:template match>

问题: anchor ( <xsl:value-of select="."/> ) 的可见文本给出了类别标题的英文版本。

以下节点的句柄匹配(所有句柄均为英文),因此我认为我应该能够匹配另一个节点。

/data/our-news-categories-for-list-fr/entry/title-fr/@handle (title-fr节点的值是类别标题的法语翻译)

/data/our-news-article-fr/entry/categories/item/@handle

我是 XSLT 新手,正在努力寻找如何做到这一点。

非常感谢。

最佳答案

添加<xsl:key name="k1" match="our-news-categories-for-list-fr/entry" use="@id"/>作为 XSLT 样式表元素的子元素。然后使用例如<li><a href="{/data/params/root}/{/data/params/root-page}/our-news/categorie/{@handle}/"><xsl:value-of select="key('k1', @id)/title-fr"/></a></li> .

关于xslt - 使用 XSLT 匹配不同的节点句柄来获取节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509004/

相关文章:

xml - 在应用任何其他模板之前,如何将完整文档转换为小写?

xslt - 身份模板困惑

XSLT 命名空间别名在 Firefox 或 Chrome 中不起作用

xml - XSLT 等于和不等于运算符对不存在的节点返回相同的结果。这怎么可能?

design-patterns - 最多允许 K 个不匹配的袋鼠模式匹配方法

java - 如何确定一个字符串部分包含另一个字符串? (最好是Java)

xml - 在不排序的情况下从和xml中选择最低值

java - 如何使用Jre默认处理器(JAXPSAXProcessor)获取XPath中的元素<and>和<or>

xml - 使用 XSLT 计算差异

python - 人员匹配程序或算法