parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

посоветуйте с задачкой

Maxx 06.07.2016 17:39 / 06.07.2016 17:42

есть у меня набор кусочков HTML в которых лежат "шапки" таблиц. Типа таких, упрощенно:
<tr>
	<td rowspan=2>rowspan 2</td>
	<td colspan=2 >colspan 2</td>
</tr>
<tr>
	<td>1</td>
	<td>2</td>
</tr>
мне эти сегменты надо преобразовать в xml-вид, понятный excel-ю, вот так (опять же упрощенно, лишнее повыкидывал):
<Row>
	<Cell ss:MergeDown="1">rowspan 2</Cell>
	<Cell ss:MergeAcross="1">colspan 2</Cell>
</Row>
<Row>
	<Cell ss:Index="2">1</Cell>
	<Cell>2</Cell>
</Row>
В принципе тут всё тривиально, регулярками делаются замены, мерджи пересчитываются... за исключением одного момента:
<Cell ss:Index="2">1</Cell>
Вот тут мне немного мозг припекло, если честно. Excel не может как браузер таблицу посчитать сам и хочет чтобы были индексы у сдвинутых ячеек (причем только у первой в группе!). Как этот индекс высчитывать в общем случае?
В голову приходит приблизительно такой алгоритм:
1. высчитываем ширину таблицы по первой строке (количество td+colspan)
2. строим что-то типа двумерного массива (таблица, хэш?)
3. бежим по строкам заполняя этот массив. Встречая rowspan=N помечаем более нижние элементы N как "занятые", в остальные попадают сами данные.
4. Когда всё заполнили, перебираем и строим xml

Выглядит ужасно, с моей точки зрения. Может у кого есть какие то более свежие идеи?