У меня есть XML-документ, основанный на том, что Excel создает при сохранении в виде «XML Spreadsheet 2003 (* .xml)».
Сама электронная таблица содержит раздел заголовка с иерархией меток:
| A B C D E F G H I
-+-----------------------------------------------------
1| a1 a2
2| a11 a12 a13 a21 a22
3| a111 a112 a121 a122 a131 a132 a221 a222
Эта иерархия присутствует на всех листах рабочей книги и везде выглядит более или менее одинаково.
Excel XML работает точно так же, как обычные таблицы HTML. (<row>
с, которые содержат <cell>
с). Я был в состоянии преобразовать все в такую древовидную структуру:
<node title="a1" col="1">
<node title="a11" col="1">
<node title="a111" col="1"/>
<node title="a112" col="2"/>
</node>
<node title="a12" col="3">
<node title="a121" col="3" />
<node title="a122" col="4" />
</node>
<!-- and so on -->
</node>
Но вот сложность:
- существует более одного рабочего листа, поэтому для каждого из них есть дерево
- иерархия может немного отличаться на каждом листе, деревья не будут равны (например, лист 2 может иметь "a113", в то время как другие не имеют)
- Глубина дерева явно не ограничена
- однако метки должны быть одинаковыми на всех листах, что означает, что они могут использоваться для группировки
Я бы хотел объединить эти отдельные деревья в одно, которое выглядит так:
<node title="a1">
<col on="sheet1">1</col>
<col on="sheet2">1</col>
<node title="a11">
<col on="sheet1">1</col>
<col on="sheet2">1</col>
<node title="a111">
<col on="sheet1">1</col>
<col on="sheet2">1</col>
</node>
<node title="a112">
<col on="sheet1">2</col>
<col on="sheet2">2</col>
</node>
<node title="a113"><!-- different here -->
<col on="sheet2">3</col>
</node>
</node>
<node title="a12">
<col on="sheet1">3</col>
<col on="sheet2">4</col>
<node title="a121">
<col on="sheet1">3</col>
<col on="sheet2">4</col>
</node>
<node title="a122">
<col on="sheet1">4</col>
<col on="sheet2">5</col>
</node>
</node>
<!-- and so on -->
</node>
В идеале я хотел бы иметь возможность выполнить слияние до Я даже построил три структуры из Excel XML (если вы меня начнете, это будет замечательно ). Но поскольку я понятия не имею, как мне это сделать, слияние после того, как деревья будут построены (т.е. описанная выше ситуация), будет в порядке.
Спасибо за ваше время. :)