Как заполнить столбец в таблице .ODT? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь исправить мой документ .ODT (изменить значения в таблице) с помощью xslt. Я знаю, как изменить значение только одной ячейки в таблице, но как заполнить весь столбец?

Это пример того, как изменить одно значение из таблицы (строка = 3, столбец = 3)

<xsl:template match="table:table[@table:name='1 level']/table:table-row[position()=3]/table:table-cell[position()=3]">
        <xsl:apply-templates select="." mode="replace">
            <xsl:with-param name="value" select="TEST"/>
        </xsl:apply-templates>
    </xsl:template>

Перед исправлением:

      A   B   C  
 --- --- --- --- 
  1   1   1   1  
  2   1   1   1  
  3   1   1   1  
  4   1   1   1  

После исправления:


      A   B    C    
 --- --- --- ------ 
  1   1   1   1     
  2   1   1   1     
  3   1   1   TEST  
  4   1   1   1     

Как заполнить весь столбец, изменяя данные в цикле? У меня есть список XML, который приходит из файла <xsl:variable name="data" select="document('template.xml')/root"/>:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
<marketDatas>
    <marketData>
        <countDeals>10</countDeals>
    </marketData>
    <marketData>
        <countDeals>20</countDeals>
    </marketData>
    <marketData>
        <countDeals>30</countDeals>
    </marketData>
</marketDatas>
<root>

и хотите изменить строку C1-C3 на значение из списка marketDatas. Ожидаемый результат:


      A   B     C     
 --- --- --- -------- 
  1   1   1   10   
  2   1   1   20   
  3   1   1   30   
  4   1   1   1  

1 Ответ

0 голосов
/ 06 мая 2019

Вам не нужно сильно меняться.Если вы просто хотите изменить свой последний столбец таблицы, измените свой код на:

<xsl:template match="table:table[@table:name='1 level']/table:table-row/table:table-cell[position() = last()]">
    <xsl:variable name="currRow" select="count(parent::table:table-row/preceding-sibling::table:table-row) + 1"/>
    <xsl:apply-templates select="." mode="replace">
        <xsl:with-param name="value" select="$data/root/marketDatas/marketData[$currRow]/countDeals"/>
    </xsl:apply-templates>
</xsl:template>

Это должно совпадать в каждой строке таблицы в последней ячейке.Если вы всегда хотите изменить 3-й ряд, не заменяйте «position () = 3».Обратите внимание, что это может изменить и другие строки, если вы работаете с пролетами.Если ваша последняя ячейка таблицы имеет интервал 2 (так что технически она является последней ячейкой таблицы, но начинается на один столбец раньше), она также будет заменена.

  • Обновленная версия: это не проверено, ноон должен работать.Подумайте о том, чтобы реализовать запасной вариант, если $ value не объявлено или не пусто (string-length ($ value) = 0).
...