xslt генерирующий элемент текущей позиции и значение next во вложенных узлах - PullRequest
0 голосов
/ 10 декабря 2018

Учитывая данный код:

<xsl:for-each select="$data/row">
    <xsl:if test="position() mod 2 = 1" >
        <xsl:element name="{current()}" >
            <xsl:value-of select="/*next element somehow*/" />
        </xsl:element>  
    </xsl:if>
</xsl:for-each>

Как я могу получить значение следующего элемента, когда я знаю, что это четный элемент в моем цикле foreach?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Другой вариант - вместо этого использовать позиционную группировку:

      <xsl:for-each-group select="$data/row" group-adjacent="(position() - 1) idiv 2">
          <xsl:element name="{.}">
              <xsl:value-of select="current-group()[2]"/>
          </xsl:element>
      </xsl:for-each-group>

Пример: https://xsltfiddle.liberty -development.net / jyH9rNu

0 голосов
/ 10 декабря 2018

Сделайте это ...

<xsl:value-of select="following-sibling::row[1]" />

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

<data>
   <row>1</row>
   <extrarow>1</extrarow>
   <row>2</row>
</data>

Тогда, если вы были в строке 1 и выполнили приведенный выше оператор, он получит строку 2. Если вы хотите получить extrarow(или любой элемент, следующий сразу за текущим), сделайте это

<xsl:value-of select="following-sibling::*[1]" />

Обратите внимание, что вы можете объединить xsl:for-each и xsl:if в один, например:

<xsl:for-each select="$data/row[position() mod 2 = 1]" >
...