XSLT apply-template with mode - неверный результат без режима соответствия

Вот простой пример.

Вот мой XML:

<?xml version="1.0" encoding="utf-8" ?>
<dogs>
    <dog type="Labrador">
        <Name>Doggy</Name>
    </dog>
    <dog type="Batard">
        <Name>Unknown</Name>
    </dog>
</dogs>

Этот XML используется с двумя Xslt. Это обычный:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="text"/>

    <xsl:template match="dogs">
        <xsl:text>First template&#13;&#10;</xsl:text>
        <xsl:apply-templates select="." mode="othertemplate" />
    </xsl:template>
</xsl:stylesheet>

Это дочерний:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:include href="transform.xslt"/>

    <xsl:template match="dogs" mode="othertemplate">
        <xsl:text>&#9;&#9;Other template</xsl:text>
    </xsl:template>
</xsl:stylesheet>

Дочерний включает общий (называемый transform.xslt).

Когда я выполняю дочерний процесс, я получаю ожидаемый результат:

First template
        Other template

Когда Я выполняю общий, я получаю странные результаты:

First template


        Doggy


        Unknown

Общий применяет шаблон с режимом «othertemplate». Этот режим только иногда включается в дочерний xslt.

Я хочу, чтобы, если нет шаблона с режимом «othertemplate», то ничего не выводилось.

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

Что мне делать?

Спасибо

5
задан vIceBerg 26 August 2010 в 17:13
поделиться