合并两个不同XML文件中的密钥(从语言中分离数据)

时间:2010-09-21 10:50:43

标签: xml xslt

我有两个XML文件在XSLT中呈现一个页面。这是因为我必须将语言与多语言网站的数据分开。我需要关联来自一个和另一个的数据来打印一个值。

我的index.xml:

<?xml version="1.0" encoding="utf-8"?>
<index>
    <language>en</language>

    <example>
        <category id="1">
            <href>/category/id/1</href>
        </category>
        <category id="2">
            <href>/category/id/2</href>
        </category>
    </example>
</index>

然后我有一个类似于:

的base.en.xml
<?xml version="1.0" encoding="utf-8"?>
<language>
    <category id="1">Category 1</category>
    <category id="2">Category 2</category>
</language>

我的不完整index.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="language" select="document('index.en.xml'))" /> 

    <xsl:template match="/">
        <html>
            <head>
                <title>Example</title>    
            </head>

            <body>
                <ul>
                    <xsl:apply-templates select="index/example/category" />
                </ul>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="index/example/category">
        <a href="{href}"></a>
    </xsl:template>

</xsl:stylesheet>

最后输出所需的输出:

<html>
    <head>
        <title>Example</title>
    </head>

    <body>
        <ul>
            <li><a href="/category/id/1">Category 1</a></li>
            <li><a href="/category/id/2">Category 2</a></li>
        </ul>
    </body>
</html>

提前致谢!

1 个答案:

答案 0 :(得分:2)

document()中的xsl:param函数调用有额外的“)”,这违反了您的XSLT。

解决后,您可以针对language参数执行XPATH表达式。

$language/language/category[current()/@id=@id]

index/example/category模板的内部,current()指的是当前匹配的index/example/category元素。谓词过滤器使用它@id来选择正确的/language/category元素。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />

    <xsl:param name="language" select="document('index.en.xml')" />

    <xsl:template match="/">
        <html>
            <head>
                <title>Example</title>
            </head>

            <body>
                <ul>
                    <xsl:apply-templates select="index/example/category" />
                </ul>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="index/example/category">
        <a href="{href}"><xsl:value-of select="$language/language/category[current()/@id=@id]"/></a>
    </xsl:template>

</xsl:stylesheet>