Использование XSL для стилизации XML с несколькими XInclude

Я пытаюсь стилизовать документ XML, который использует xinclude для включения других файлов XML для целей модульности. Я использую Firefox в качестве инструмента для визуализации трансформации. (Все файлы находятся в одной папке) На данный момент я написал следующий xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                          xmlns:xi="http://www.w3.org/2001/XInclude"
                          exclude-result-prefixes='xsl xi'>
    <xsl:template match="/interfaces">
        <html>
            <head>
                <meta charset="UTF-8" content="text/html" http-equiv="Content-Type"/>
                <title>Messages</title>
            </head>
            <body>
                <xsl:apply-templates select="message"/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="message">
        <xsl:value-of select="@name"/><br/>
        <xsl:apply-templates select="xi:include[@href][@parse='xml' or not(@parse)]" />
    </xsl:template>

    <xsl:template match="xi:include">
        Should be outputed...<xsl:apply-templates select="document(@href)" />
    </xsl:template>

</xsl:stylesheet

Для обработки следующего XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='messages-xsl.xml'?>

<interfaces>
    <message name="some_message">
        <xi:include href="some_message.xml" xmlns:xi="http://www.w3.org/2003/XInclude"/>
    </message>
</interfaces>

Я знаю, что некоторые посты в stackru задают похожие вопросы, но я пока не могу решить проблему. Заранее спасибо.

1 ответ

Решение

Ваш XSLT имеет xmlns:xi="http://www.w3.org/2001/XInclude"Тем не менее, ваш образец имеет xmlns:xi="http://www.w3.org/2003/XInclude"вам нужно будет использовать одно и то же пространство имен как в XSLT, так и в XML. И для лучшего сообщения об ошибках я бы предложил использовать version="1.0" в XSLT, поскольку Firefox использует процессор XSLT 1.0 и переключается на прямую совместимую обработку с вашим атрибутом version="2.0".

Другие вопросы по тегам