2012-06-02 2 views
4

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

У меня есть три входных параметра/переменные, которые необходимо обработать с помощью xslt версии 1.0.

<!-- Variables in the XSL --> 
<xsl:variable name="tw">125</xsl:variable> 
<xsl:variable name="rows">4</xsl:variable> 
<xsl:variable name="cols">6</xsl:variable> 

Я хочу, чтобы в конечном итоге с расчетными значениями (пиксели) в «фона позиции» в HTML, как показано ниже: -

<div style="background-position:-0px -0px;"><img src="images/thumbs/1.jpg" alt="one" /></div> 
<div style="background-position:-125px -0px;"><img src="images/thumbs/2.jpg" alt="two" /></div> 
<div style="background-position:-250px -0px;"><img src="images/thumbs/3.jpg" alt="three" /></div> 
<div style="background-position:-375px -0px;"><img src="images/thumbs/4.jpg" alt="four" /></div> 
<div style="background-position:-500px -0px;"><img src="images/thumbs/5.jpg" alt="five" /></div> 
<div style="background-position:-625px -0px;"><img src="images/thumbs/6.jpg" alt="six" /></div> 

<div style="background-position:-0px -125px;"><img src="images/thumbs/7.jpg" alt="seven" /></div> 
<div style="background-position:-125px -125px;"><img src="images/thumbs/8.jpg" alt="eight" /></div> 
<div style="background-position:-250px -125px;"><img src="images/thumbs/9.jpg" alt="nine" /></div> 
<div style="background-position:-375px -125px;"><img src="images/thumbs/10.jpg" alt="ten" /></div> 
<div style="background-position:-500px -125px;"><img src="images/thumbs/11.jpg" alt="11" /></div> 
<div style="background-position:-625px -125px;"><img src="MIB/images/thumbs/12.jpg" alt="12" /></div> 

<div style="background-position:-0px -250px;"><img src="images/thumbs/13.jpg" alt="13" /></div> 
<div style="background-position:-125px -250px;"><img src="/mages/thumbs/14.jpg" alt="14" /></div> 
<div style="background-position:-250px -250px;"><img src="images/thumbs/15.jpg" alt="15" /></div> 
<div style="background-position:-375px -250px;"><img src="images/thumbs/16.jpg" alt="16" /></div> 
<div style="background-position:-500px -250px;"><img src="images/thumbs/17.jpg" alt="17" /></div> 
<div style="background-position:-625px -250px;"><img src="images/thumbs/18.jpg" alt="18" /></div> 

<div style="background-position:-0px -375px;"><img src="images/thumbs/19.jpg" alt="19" /></div> 
<div style="background-position:-125px -375px;"><img src="images/thumbs/20.jpg" alt="20" /></div> 
<div style="background-position:-250px -375px;"><img src="images/thumbs/21.jpg" alt="21" /></div> 
<div style="background-position:-375px -375px;"><img src="images/thumbs/22.jpg" alt="22" /></div> 
<div style="background-position:-500px -375px;"><img src="images/thumbs/23.jpg" alt="23" /></div> 
<div style="background-position:-625px -375px;"><img src="images/thumbs/24.jpg" alt="24" /></div> 

Я понимаю, что нужно как-то зациклиться и сохранить счет (как-то), и увидев многочисленные примеры циклов и подсчета, я ожидал, что процесс будет прямым, но затем я прочитал около position() и number и так много других вещей, которые моя голова вращается. Я не знаю, как или где позиционировать цикл подсчета в операторе for-each или даже если оптимальным решением является for-each. Ни одна из моих слабых попыток не создала хорошо сформированный XSL, поэтому вы можете видеть, что я не получаю быстрых результатов.

Так вот, надеясь, что один из гуру здесь может помочь мне начать процесс и помочь в моем понимании xslt.

Данные изображения приходит из файла XML, и я могу обрабатывать IMG SRC и альт без проблем, так что это только расчеты пикселов, зацикливание, подсчитывая и т.д., что является проблемой

<xsl:for-each select="DATASET/ITEM"> 
<div style="background-position:-{rowpos}px -{colpos}px;"><img src="{thumbnailimage}" alt="{imagealttext}" /></div> 
</xsl:for-each> 
<!-- rowpos and colpos are the calculated values that are generated from whatever loop and count process is used --> 

Так для уточнения:

Расчет. Существует 3 переменных, которые будут давать 6 вычисленных значений. TW = 125. Ширина используется для положений фона, поэтому в зависимости от строки/столбца вычисленные значения приведены в примере - например. tw-tw, tw, tw * 2, tw * 3, tw * 4 и tw * 5 (всего 6 расчетов). Количество строк и количество столбцов определяет, как и где каждая эскиз помещается с использованием вычисленных значений пикселей, которые в приведенном выше случае равны 0px, -125px, -250px, -375px, -500px и -675px.

Дальнейшее расширение вычислений: - Положение строк и столбцов определяется шириной уменьшенного изображения. Позиция каждого эскиза определяется количеством строк и количеством столбцов. В сетке 3-х столбчатых столбцов с большими большими пальцами шириной 150 пикселей потребуются 9 эскизов, поэтому 9 наборов значений px, но потребуется только 2 уникальных вычисления, например. ТВт * 2 и ТВт * 3, как показано ниже: -

<div style="background-position: -0px -0px;" /><img src="image 1.jpg" alt="Alt text 1" /></div> 
<div style="background-position: -125px -0px;" /><img src="image 2.jpg" alt="Alt text 2" /></div> 
<div style="background-position: -250px -0px;" /><img src="image 3.jpg" alt="Alt text 3" /></div> 
<div style="background-position: -375px -0px;" /><img src="image 4.jpg" alt="Alt text 4" /></div> 
<div style="background-position: -500px -0px;" /><img src="image 5.jpg" alt="Alt text 5" /></div> 
<div style="background-position: -0px -125px;" /><img src="image 6.jpg" alt="Alt text 6" /></div> 
<div style="background-position: -125px -125px;" /><img src="image 7.jpg" alt="Alt text 7" /></div> 
<div style="background-position: -250px -125px;" /><img src="image 8.jpg" alt="Alt text 8" /></div> 
<div style="background-position: -375px -125px;" /><img src="image 9.jpg" alt="Alt text 9" /></div> 
<div style="background-position: -500px -125px;" /><img src="image 10.jpg" alt="Alt text 10" /></div> 
<div style="background-position: -0px -250px;" /><img src="image 11.jpg" alt="Alt text 11" /></div> 
<div style="background-position: -125px -250px;" /><img src="image 12.jpg" alt="Alt text 12" /></div> 
<div style="background-position: -250px -250px;" /><img src="image 13.jpg" alt="Alt text 13" /></div> 
<div style="background-position: -375px -250px;" /><img src="image 14.jpg" alt="Alt text 14" /></div> 
<div style="background-position: -500px -250px;" /><img src="image 15.jpg" alt="Alt text 15" /></div> 
<div style="background-position: -0px -375px;" /><img src="image 16.jpg" alt="Alt text 16" /></div> 
<div style="background-position: -125px -375px;" /><img src="image 17.jpg" alt="Alt text 17" /></div> 
<div style="background-position: -250px -375px;" /><img src="image 18.jpg" alt="Alt text 18" /></div> 
<div style="background-position: -375px -375px;" /><img src="image 19.jpg" alt="Alt text 19" /></div> 
<div style="background-position: -500px -375px;" /><img src="image 20.jpg" alt="Alt text 20" /></div> 

XML файл Изображение ЦСИ и альтернативный текст приходят из файла XML: -

<DATASET> 
<ITEM> 
    <THUMBNAILIMAGE>image1.jpg</THUMBNAILIMAGE> 
    <IMAGEALTTEXT>Alt text 1</IMAGEALTTEXT> 
</ITEM> 
<ITEM> 
    <THUMBNAILIMAGE>image2.jpg</THUMBNAILIMAGE> 
    <IMAGEALTTEXT>Alt text 2</IMAGEALTTEXT> 
</ITEM> 
...... 
<ITEM> 
    <THUMBNAILIMAGE>image20.jpg</THUMBNAILIMAGE> 
    <IMAGEALTTEXT>Alt text 20</IMAGEALTTEXT> 
</ITEM> 
</DATASET> 
+0

Итак, в чем вопрос? Я его не вижу. Кроме того, где находится исходный XML-документ (насколько это возможно, пожалуйста)? В чем смысл переменных с именами криков (btw, их значения все установлены не лучшим образом)? Наконец, каковы требования к трансформации? Пожалуйста, отредактируйте вопрос и предоставьте всю эту важную недостающую информацию, чтобы дать ей смысл. –

+0

@Dimitre: Я надеялся, что вы ответите ... но не таким образом :(Я думал, что вопрос ясен - как мне достичь расчетов через цикл и написать html в показанном примере. Мне нужно предоставить. Не существует XML-файла. XSLT будет передан три параметра - tw, cols, rows. Извините, я не понимаю вопрос о требованиях к трансформации. Все, что я хочу сделать, это разместить правильно рассчитанный пиксель значения ROWPOS и COLPOS с использованием правильно написанного xslt. – PBB

+0

Вычислить * что *? Любые * правила * для расчета? Как должны генерироваться значения для позиций? Используя то, что * rules *? Как вы можете сказать, что «Нет XML-файла как таковой », когда ваш код содержит выражение XPath« DATASET/ITEM »??? Почему люди должны задавать эти вопросы или угадывать? Вся эта важная информация должна быть в вопросе, иначе вопрос не имеет смысла. –

ответ

0

Вот полный, короче и проще (только один рекурсивная шаблон), рекурсивная, XSLT 1.0 Преобразование:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:param name="pTw" select="125"/> 
    <xsl:param name="pNumRows" select="4"/> 
    <xsl:param name="pNumCols" select="5"/> 

    <xsl:variable name="vImageItems" select="/*/*"/> 

    <xsl:template match="/"> 
     <xsl:call-template name="generateDiv"/> 
    </xsl:template> 

    <xsl:template name="generateDiv"> 
     <xsl:param name="pRow" select="1"/> 
     <xsl:param name="pCol" select="1"/> 

     <xsl:if test="not($pRow > $pNumRows)"> 
     <xsl:variable name="vImageItem" select= 
     "$vImageItems[($pRow -1)*$pNumCols + $pCol]"/> 

     <div style="background-position: -{($pCol -1)*$pTw}px -{($pRow -1)*$pTw}px;"> 
      <img src="{$vImageItem/THUMBNAILIMAGE}" 
       alt="{$vImageItem/IMAGEALTTEXT}" /> 
     </div> 

     <xsl:variable name="vnewCol"> 
     <xsl:choose> 
      <xsl:when test="$pCol = $pNumCols">1</xsl:when> 
      <xsl:otherwise><xsl:value-of select="$pCol+1"/></xsl:otherwise> 
     </xsl:choose> 
     </xsl:variable> 

     <xsl:variable name="vnewRow"> 
      <xsl:choose> 
      <xsl:when test="$vnewCol = 1"><xsl:value-of select="$pRow+1"/></xsl:when> 
      <xsl:otherwise><xsl:value-of select="$pRow"/></xsl:otherwise> 
      </xsl:choose> 
     </xsl:variable> 

     <xsl:call-template name="generateDiv"> 
     <xsl:with-param name="pRow" select="$vnewRow"/> 
     <xsl:with-param name="pCol" select="$vnewCol"/> 
     </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

Когда это преобразование применяется к прилагаемому XML документа:

<DATASET> 
    <ITEM> 
     <THUMBNAILIMAGE>image1.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 1</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image2.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 2</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image3.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 3</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image4.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 4</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image5.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 5</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image6.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 6</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image7.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 7</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image8.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 8</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image9.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 9</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image10.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 10</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image11.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 11</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image12.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 12</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image13.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 13</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image14.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 14</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image15.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 15</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image16.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 16</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image17.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 17</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image18.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 18</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image19.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 19</IMAGEALTTEXT> 
    </ITEM> 
    <ITEM> 
     <THUMBNAILIMAGE>image20.jpg</THUMBNAILIMAGE> 
     <IMAGEALTTEXT>Alt text 20</IMAGEALTTEXT> 
    </ITEM> 
</DATASET> 

разыскиваемый, правильный результат получается:

<div style="background-position: -0px -0px;"> 
    <img src="image1.jpg" alt="Alt text 1"/> 
</div> 
<div style="background-position: -125px -0px;"> 
    <img src="image2.jpg" alt="Alt text 2"/> 
</div> 
<div style="background-position: -250px -0px;"> 
    <img src="image3.jpg" alt="Alt text 3"/> 
</div> 
<div style="background-position: -375px -0px;"> 
    <img src="image4.jpg" alt="Alt text 4"/> 
</div> 
<div style="background-position: -500px -0px;"> 
    <img src="image5.jpg" alt="Alt text 5"/> 
</div> 
<div style="background-position: -0px -125px;"> 
    <img src="image6.jpg" alt="Alt text 6"/> 
</div> 
<div style="background-position: -125px -125px;"> 
    <img src="image7.jpg" alt="Alt text 7"/> 
</div> 
<div style="background-position: -250px -125px;"> 
    <img src="image8.jpg" alt="Alt text 8"/> 
</div> 
<div style="background-position: -375px -125px;"> 
    <img src="image9.jpg" alt="Alt text 9"/> 
</div> 
<div style="background-position: -500px -125px;"> 
    <img src="image10.jpg" alt="Alt text 10"/> 
</div> 
<div style="background-position: -0px -250px;"> 
    <img src="image11.jpg" alt="Alt text 11"/> 
</div> 
<div style="background-position: -125px -250px;"> 
    <img src="image12.jpg" alt="Alt text 12"/> 
</div> 
<div style="background-position: -250px -250px;"> 
    <img src="image13.jpg" alt="Alt text 13"/> 
</div> 
<div style="background-position: -375px -250px;"> 
    <img src="image14.jpg" alt="Alt text 14"/> 
</div> 
<div style="background-position: -500px -250px;"> 
    <img src="image15.jpg" alt="Alt text 15"/> 
</div> 
<div style="background-position: -0px -375px;"> 
    <img src="image16.jpg" alt="Alt text 16"/> 
</div> 
<div style="background-position: -125px -375px;"> 
    <img src="image17.jpg" alt="Alt text 17"/> 
</div> 
<div style="background-position: -250px -375px;"> 
    <img src="image18.jpg" alt="Alt text 18"/> 
</div> 
<div style="background-position: -375px -375px;"> 
    <img src="image19.jpg" alt="Alt text 19"/> 
</div> 
<div style="background-position: -500px -375px;"> 
    <img src="image20.jpg" alt="Alt text 20"/> 
</div> 

Объяснение:

  1. Это рекурсивное решение. Нерекурсивное решение (aka Piez method) возможно, если гарантировано, что количество итераций не превышает общее количество доступных узлов (в исходных XML-документах и ​​таблицах стилей XSLT).

  2. Стоп Состояние: Текущее значение строки-число становится больше, чем параметр-заданное число строк ($pRow > $pNumRows).

  3. Действие: Сформировать необходимый новый div элемент, а затем получить значения для колонного числа и число-строк, с помощью которого выполнить следующее действие.

+0

Разве я не Димитрий - я даже не знаю, как голосовать! Я все еще перевариваю ваше решение и сравниваю его с сравнением с Лукашем (извините Майкл, не могу использовать v2, но я уверен, что вы сделали это для других, на всякий случай). Оба решения, похоже, «нуждаются» в написании полного DIV, что означает, что мне может понадобиться снова изменить вопрос, поскольку XML станет актуальным, потому что изображение src (имя файла) и alt text поставляются из XML - см. «{imagealttext}». – PBB

+0

@PBB: сначала просто запустите преобразование любым XML-документом (например, '', чтобы убедиться, что вы получили тот же результат. Затем отредактируйте вопрос, чтобы предоставить значимый (но как можно меньший) XML-документ, а также отредактировать желаемый результат чтобы соответствовать этому XML-документу. Наконец, пожалуйста, сообщите мне через комментарий, и я обновлю этот ответ, чтобы работать с предоставленным XML-документом и получить желаемый результат. Что касается голосования, прямо сейчас вы можете принять ответ (нажав на контрольной отметке рядом с ним). У вас будет право на повышение, когда вы достигнете 50 очков.Вам может потребоваться больше rep для downvoting –

+0

извините, как я сказал «всего новичков», поэтому я понятия не имею, как преобразовать «с любым XML-документом, таким как ». – PBB

3

Я думаю, что это может осуществляться с использованием код ниже (XSLT 1.0). Следующее преобразование должно идти с любым XML-файлом.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xsl:output indent="yes" /> 

<xsl:variable name="TW">125</xsl:variable> 
<xsl:variable name="ROWS">4</xsl:variable> 
<xsl:variable name="COLS">6</xsl:variable> 
<xsl:variable name="TOTAL"><xsl:value-of select="$ROWS * $COLS"/></xsl:variable> 

<xsl:template match="/"> 
    <xsl:call-template name="iterate_rows" /> 
</xsl:template> 

<xsl:template name="iterate_rows"> 
    <xsl:param name="num">0</xsl:param> 

    <xsl:if test="not($num = $ROWS)"> 
     <xsl:call-template name="iterate_cols"> 
      <xsl:with-param name="rows" select="$num"/> 
     </xsl:call-template> 

     <xsl:call-template name="iterate_rows"> 
      <xsl:with-param name="num" select="$num + 1"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

<xsl:template name="iterate_cols"> 
    <xsl:param name="num">0</xsl:param> 
    <xsl:param name="rows" /> 

    <xsl:if test="not($num = $COLS)"> 
     <xsl:element name="div"> 
      <xsl:attribute name="style" ><xsl:value-of select="concat('background-position:-', $TW*$num, 'px -', $TW*$rows, 'px;')" /></xsl:attribute> 

      <xsl:variable name="number" select="$rows*$COLS + $num + 1" /> 

      <xsl:element name="img"> 
       <xsl:attribute name="src"> 
        <xsl:value-of select="concat('images/thumbs/', $number, '.jpg')"/> 
       </xsl:attribute> 
       <xsl:attribute name="alt"> 
        <xsl:value-of select="$number"/> 
       </xsl:attribute> 
      </xsl:element> 

     </xsl:element> 

     <xsl:call-template name="iterate_cols"> 
      <xsl:with-param name="num" select="$num + 1"/> 
      <xsl:with-param name="rows" select="$rows" /> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

</xsl:stylesheet> 

РЕДАКТИРОВАТЬ:

В XSLT невозможно построить петли, аналогичные тем, в C++ или Java, потому что невозможно изменить значение переменной (так что невозможно иметь счетчик). Но можно повторить итерации с повторением.

В моем решении я определил два повторяющихся шаблона - первый из них имеет имя iterate_rows, а второй - iterate_cols. Точкой входа для всей «программы» является:

<xsl:template match="/"> 
    <xsl:call-template name="iterate_rows" /> 
</xsl:template> 

Это вызвано в первую очередь. Именованный шаблон iterate_rows имеет один параметр num и имеет значение по умолчанию, равное 0. Важным является условие <xsl:if ...>, которое проверяет, достиг ли мы конца цикла (в этом случае это будет значение $ROWS). Внутри блока условий у нас есть два вызова: один выполняет шаблон iterate_cols, а второй - это вызов самого шаблона iterate_rows (обратите внимание: мы вызываем его с добавленным параметром num). Второй шаблон работает аналогичным образом. Надеюсь это поможет.

+0

Вау, это было быстро. Могу ли я быть болью и просить вас пройти через то, что происходит в этом. Я прошу, чтобы я мог учиться у него, а не просто сбрасывать его в свой файл. :) Также Димитр говорит, что переменные ошибочны - как они должны быть wriiten? – PBB

+0

@PBB см. Мое редактирование ... – Lukasz

+0

Объяснение - отличная помощь. Еще раз спасибо за скорость и ваше терпение. Я попробую код и вернусь к вам. – PBB

1

В XSLT 2.0 это просто: это что-то вроде:

<xsl:for-each select="1 to $rows"> 
    <xsl:variable name="row" select="position()"/> 
    <xsl:for-each select="1 to $columns"> 
    <xsl:variable name="column" select="position()"/> 
    <div style="background-position: -{$row*$tw}px -{$column*$tw}px"/> 
    </ 
</ 

В 1.0 Вы не имеете роскошь select="1 to $rows", но популярным решением является использование select="(//*)[position() &lt;= $rows]", которая работает при условии, по крайней мере, $ rows в исходном документе. На самом деле вас не интересуют выбранные узлы, только в том, сколько их есть, что определяет, сколько раз вы выполняете цикл.

Смежные вопросы