когда xsl: foreach действительно полезен? - PullRequest
3 голосов
/ 27 марта 2009

Может ли кто-нибудь привести пример, когда xsl: foreach действительно полезен?

Я только что сделал проект и пришел к выводу, что везде я мог бы заменить его на соответствующий <xsl:apply-templates />. <xsl:if> и <xsl:when/> иногда делают код короче, и я не могу эффективно заменить его на <apply-templates/> в функциональном стиле.

В любом случае <xsl:foreach> считается вредным?

Ну, спасибо всем, я действительно не мог выбрать ответ среди лучших. я думаю, что было бы лучше собирать разные дела.

Извините, что кто-то ответил на голосование - это не я :)

Ответы [ 4 ]

5 голосов
/ 27 марта 2009

Обычно это вопрос стиля кода. Если вы делаете for-each, который довольно короткий и нуждается в доступе к переменным из родительского блока, может быть более понятным сделать for-each там, а не применять шаблоны и передавать в качестве параметров что-либо еще, что ему нужно .

Определенно бывают случаи, когда использование шаблонов более понятное, и определенно бывает, что использование for-each более понятно. Они оба полезные инструменты.

4 голосов
/ 28 марта 2009

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

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

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

2 голосов
/ 27 марта 2009

Я тоже думаю, что это вопрос стиля.

Я видел проекты, в которых таблицы стилей XSLT почти не использовали <xsl:apply-templates>. Вместо этого они всегда использовали <xsl:call-template>. Это не столько функционал, сколько процедурное кодирование. И этот подход неизбежно приводит к чрезмерному использованию <xsl:for-each>.

Лично я всегда предпочитаю стиль, который вы предложили в своем вопросе. Но это вопрос управления командой, умения и последовательности, которые позволят вам выбрать тот или иной стиль.

1 голос
/ 29 марта 2009

Я использую for-each довольно часто, потому что мне приходится создавать переменные, которые являются подмножествами больших XML-файлов.

<xsl:variable name="foo">
  <xsl:for-each select="document('bar.xml')/item">
    <xsl:if test="baz = bax">
      <xsl:copy-of select="."/>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

Это возможно с шаблоном?

Может быть, я один из тех программистов, которые не видят нативный XSL-способ делать вещи ...

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