Мне нужно создать файл XML Spreadsheet (SpreadsheetML) в определенном формате из документа XML, который содержит данные, структурированные в отдельные элементы (с использованием XSLT 1.0). Упрощенный образец ниже:
<Root>
<DetailsTable>
<row data="1"/>
<row data="2"/>
<row data="3"/>
<row data="4"/>
<row data="5"/>
<row data="6"/>
<row data="7"/>
<row data="8"/>
<row data="9"/>
<row data="10"/>
<row data="11"/>
<row data="12"/>
<row data="13"/>
<row data="14"/>
</DetailsTable>
<SummaryTable>
<row data="A"/>
<row data="B"/>
<row data="C"/>
</SummaryTable>
</Root>
Требуемый вывод должен быть представлен в виде двух отдельных «таблиц» на листе Excel, где одна находится в середине другой - как на скриншоте:
![enter image description here](https://i.stack.imgur.com/8Pz1O.png)
Проблема в том, что при XSLT-преобразовании мне нужно печатать строки одну за другой, и все ячейки должны быть напечатаны при печати строки - следовательно, для некоторых строк (например, индексы 4,5,6,7) Мне нужно добавить несколько специальных ячеек, значения которых я получу из XML-элемента SummaryTable
.
Другими словами, выходной формат XML выглядит примерно так:
<Table>
<Row>
<Cell><Data >DetailsTable</Data></Cell>
</Row>
<Row>
<Cell><Data >1</Data></Cell>
</Row>
<Row>
<Cell><Data >2</Data></Cell>
</Row>
<Row>
<Cell><Data >3</Data></Cell>
<Cell><Data >SummaryTable</Data></Cell>
</Row>
<Row>
<Cell><Data >4</Data></Cell>
<Cell><Data >A</Data></Cell>
</Row>
<Row>
<Cell><Data >5</Data></Cell>
<Cell><Data >B</Data></Cell>
</Row>
<Row>
<Cell><Data >6</Data></Cell>
<Cell><Data >C</Data></Cell>
</Row>
<Row>
<Cell><Data >7</Data></Cell>
</Row>
<Row>
<Cell><Data >8</Data></Cell>
</Row>
<Row>
</Table>
Проблема в том, что я не контролирую, сколько строк будет в таблице сведений - может быть достаточно просто сделать для них «для каждого» и добавить дополнительные элементы ячейки по определенным индексам, используя position()
.
Однако может случиться так, что их будет слишком мало (например, только один элемент строки), и в этом случае for-each
никогда не будет повторяться с индексами 4,5,6,7, поэтому моя сводная таблица не будет напечатана - и ожидаемый результат для такого случая должен быть:
![enter image description here](https://i.stack.imgur.com/9mMJR.png)
Я думал о выполнении цикла for-each определенное количество раз (например, 7), чтобы я распечатал первые семь строк вместе со сводной таблицей, а затем снова выполнил цикл for-each
на DetailsTable/row
элементы, но пропускают первые 7 позиций индекса, но это выглядит как неприятный обходной путь.
Есть еще идеи?