В чем разница междуа также - PullRequest
       0

В чем разница междуа также

8 голосов
/ 19 октября 2010

В чем разница между <xsl:apply-templates /> и <xsl:apply-templates select="." />.Я думал, что select="." не было необходимости, но я получаю разные результаты в зависимости от того, что я использую.Я пытался найти эту проблему, но ничего не смог найти.

Ответы [ 2 ]

18 голосов
/ 19 октября 2010

В чем разница между <xsl:apply-templates /> и <xsl:apply-templates select="." />

Первая инструкция :

<xsl:apply-templates />

сокращение для :

<xsl:apply-templates select="child::node()" />

Вторая инструкция :

<xsl:apply-templates select="." />

- сокращение для:

<xsl:apply-templates select="self::node()" />

Как видим, отличаются не только эти две инструкции (первая применяет шаблоны ко всем дочерним узлам, а вторая применяет шаблоны к текущему узлу), , но последняя опасна и часто может привести к бесконечной петле!

4 голосов
/ 19 октября 2010

Вы думали о разнице между

<xsl:apply-templates />

и

<xsl:apply-templates select="*" />

? Причина, по которой я спрашиваю, состоит в том, что <xsl:apply-templates select="." /> очень необычно, а <xsl:apply-templates select="*" /> очень распространено.

При выборе между этими двумя альтернативами select="*" часто не требуется, но есть разница:

  • Как отметил Димитр, <xsl:apply-templates /> без select обработает all child узлы. Это включает в себя комментарии, инструкции по обработке, и большинство в частности, текст узлов, а также дочерние элементы.
  • Для сравнения <xsl:apply-templates select="*" /> выберет только ребенка элемент узлы.

Так что, если входной XML может иметь дочерние узлы, отличные от элементов, и вы не хотите обрабатывать эти узлы, <xsl:apply-templates select="*" /> - это то, что вам нужно.

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