Разница в обработке правил шаблона XSLT 1.0 против 2.0 (bis) - PullRequest
0 голосов
/ 16 февраля 2012

См. Разница 1,0 против 2,0 . Этот вопрос решен, но для меня все еще остается загадкой, что вызвало проблему в первую очередь.
Теперь я могу что-то найти, но мне нужна помощь, чтобы понять, что происходит.
Я упростил ввод XML до

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Manager>
        <Employee grade="9"/>
        <Employee grade="8"/>
    </Manager>
    <Manager>
        <Employee grade="9"/>
        <Employee grade="8"/>
        <Employee grade="4"/>
    </Manager>
</root>

Таблица стилей, которую я применяю для этого ввода,

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

    <xsl:template match="/">
        <root>
            <xsl:apply-templates select="root/Manager"/>
        </root>
    </xsl:template>

    <xsl:template match="Manager">
        <test><xsl:value-of select="Employee/@grade"/></test>
    </xsl:template>
</xsl:stylesheet>

Выход

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <test>9</test>
    <test>9</test>
</root>

Но, запустив преобразование в режиме XSLT 2.0 (измените таблицу стилей / @ version на "2.0"), вы получите

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <test>9 8</test>
    <test>9 8 4</test>
</root>

Интересно, какая именно разница в XSLT 1.0 и XSLT 2.0 вызывает это?

1 Ответ

1 голос
/ 16 февраля 2012

Что касается первого различия, я объяснил, что в XSLT 2.0 операторы сравнения, такие как меньше или больше или меньше или равны и т. Д. По умолчанию, сравнивают строки, тогда как в XSLT 1.0 эти операторы определены только для чисел и таким образом конвертировать любые операнды в числа.

Для этого поста разница в том, что при использовании XSLT 1.0 xsl:value-of select="foo" выводится строковое значение первого элемента foo в выбранном наборе узлов из foo элементов, в то время как в XSLT 2.0 это изменилось, если последовательность выбранный затем выводится разделенный пробелами список строкового значения элемента в последовательности. Вы можете изменить разделитель (то есть пробел), используемый с атрибутом separator, равным xsl:value-of в XSLT 2.0. Смотри также http://www.w3.org/TR/xslt20/#incompatibilities.

...