Группировка XSLT

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

Я использую эти тесты как «тесты на разумность», чтобы также убедиться, что Jest даже работает.

Распространенной ошибкой является предположение, что imported_thing.toBeTruth() потерпит неудачу, если импорт не сработал. Это не будет - imported_thing будет пустым объектом, что является правдой.

Вот что мы используем:

import Account from '/account';

//describe block

expect(Account).toBeTruthy();

expect(Object.keys(Account).length > 0).toBe(true);

Это, конечно, работает, только если то, что Account действительно имеет свойства (и должно быть). Другой метод заключается в том, чтобы специально проверить свойства, которые вы ожидаете.

5
задан Otavio 3 February 2009 в 14:24
поделиться

4 ответа

Следующее преобразование приводит к необходимому результату:

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

 <xsl:variable name="vN" select="3"/>

  <xsl:template match="/*">
    <xsl:copy>
      <xsl:apply-templates 
           select="line[position() mod $vN = 1]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="line">
    <set>
      <xsl:apply-templates mode="copy" select= 
       ". 
       | 
        following-sibling::line[position() &lt; $vN]"/>
    </set>
  </xsl:template>

    <xsl:template match="line" mode="copy">
      <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

При применении на предоставленный XML-документ:

<Header>
    <line>Line 1</line>
    <line>Line 2</line>
    <line>Line 3</line>
    <line>Line 4</line>
    <line>Line 5</line>
    <line>Line 6</line>
    <line>Line 7</line>
    <line>Line 8</line>
    <line>Line 9</line>
</Header>

результат:

<Header>
  <set>
    <line>Line 1</line>
    <line>Line 2</line>
    <line>Line 3</line>
  </set>
  <set>
    <line>Line 4</line>
    <line>Line 5</line>
    <line>Line 6</line>
  </set>
  <set>
    <line>Line 7</line>
    <line>Line 8</line>
    <line>Line 9</line>
  </set>
</Header>

Действительно отметьте следующее:

  1. Использование XPath mod оператор для обнаружения первого line элемент в каждой группе vN элементы.

  2. Использование режимов, чтобы смочь обработать отличающийся line элементы различными шаблонами

4
ответ дан 14 December 2019 в 13:48
поделиться

В целом в XSLT, если Вы хотите создать иерархию из списка, можно использовать ключевые слова предыдущего одноуровневого элемента и следовать-одноуровневого-элемента. Это - easist, если существует запись маркера между наборами.

Поскольку у Вас нет маркера как такового в этом случае, я предполагаю, что решение могло включить ключевое слово следовать-одноуровневого-элемента и оператор Mod. Модификация, обеспечивающая подразделению между наборами.

Я не попробовал его, но это было бы моим первым запуском.

xslt обычно является хорошим местом для запуска с понимания различных ключевых слов.

1
ответ дан 14 December 2019 в 13:48
поделиться

http://www.xml.com/pub/a/2003/11/05/tr.html показывает немного менее ужасный способ сделать этот XSLT 2.0 использования. Основной элемент - этот:

<xsl:for-each-group select="*" group-ending-with="*[position() mod 3 = 0]">

1
ответ дан 14 December 2019 в 13:48
поделиться

Это должно быть возможно. Имеет желаемый вывод:

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

  <xsl:template match="/Header">
    <Header>
      <xsl:for-each select="line">
        <xsl:if test="not(number()=0) and position() mod 3 = 0">
          <set>
            <xsl:variable name="pos" select="position()"/>
            <line><xsl:value-of select="../line[position()=($pos -2)]"/></line>
            <line><xsl:value-of select="../line[position()=($pos -1)]"/></line>
            <line><xsl:value-of select="text()"/></line>
            </set>
        </xsl:if>

      </xsl:for-each>
    </Header>
  </xsl:template>

</xsl:stylesheet>

($pos-1, вещь $pos-2 не очень симпатична),

0
ответ дан 14 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: