Слияние ключей в двух разных XML-файлах (отделение данных от языка) - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть два 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 Ответ

2 голосов
/ 21 сентября 2010

Ваш document() вызов функции в xsl:param имел дополнительный ")", который нарушал ваш XSLT.

Как только это будет решено, вы можете выполнить выражения XPATH против параметра language.

$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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...