Когда использовать для каждого и когда применять apply-templates в xslt? - PullRequest
6 голосов
/ 28 мая 2011

Я слышал, что в большинстве случаев при написании XSLT обычно можно (и лучше) использовать apply-шаблоны, а не for-each.Это правда?Если да, каковы преимущества использования apply-templates?

1 Ответ

5 голосов
/ 28 мая 2011

Использование <xsl:for-each> ни в коем случае не вредно, если точно знать, как обрабатывается <xsl:for-each> .

Беда в том, что многие новички в XSLT, имеющие опыт в императивном программировании, принимают <xsl:for-each> вместо «петли» в своем любимом PL и думают, что это позволяет им выполнять невозможное - например, увеличивать счетчик или любая другая модификация уже определенного <xsl:variable>.

Одним обязательным использованием <xsl:for-each> в XSLT 1.0 является изменение текущего документа - это часто необходимо для того, чтобы иметь возможность использовать функцию key() в документе, отличном от текущего исходного XML-документа, для пример эффективного доступа к таблице поиска, которая находится в его собственном XML-документе.

С другой стороны, использование <xsl:template> и <xsl:apply-templates> гораздо мощнее и элегантнее.

Вот некоторые из наиболее важных различий между двумя подходами :

  1. xsl:apply-templates намного богаче и глубже, чем xsl:for-each, даже просто потому, что мы не знаем, какой код будет применяться на узлах выбор - в общем случае этот код будет отличаться для разные узлы списка узлов.

  2. Код, который будет применяться может быть написано так, как xsl:apply template s было написано и люди, которые не знают оригинального автора.

В библиотеке FXSL реализация функций высшего порядка (HOF) в XSLT была бы невозможна , если в XSLT не было инструкции <xsl:apply-templates>.

Сводка : Шаблоны и инструкция <xsl:apply-templates> - это то, как XSLT реализует и работает с полиморфизмом.

Ссылка : Просмотреть всю ветку: http://www.stylusstudio.com/xsllist/200411/post60540.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...