Я пытаюсь обновить фрагмент текста HTML новой информацией о каждой строке. Это пример HTML:
<div>
<span class="column1">
<a id="l1"></a>aaaaa<span type="foo">aaa</span>aa
<br id="l2"/>aaaaaaa
</span>
<span class="column2">
<br id="l3"/>aaabbbb
<br id="l4"/>bb<span>123</span>bbbbb
<br id="l5"/>bbbbbbb
<br id="l6"/>ccccccc
</span>
</div>
И это новая информация:
<sections>
<section n="1" type="intro" from="1" to="3"/><!-- @from and @to are line numbers -->
<section n="2" type="main" from="3" to="5"/>
<section n="3" type="conclusion" from="6" to="6"/>
</sections>
Цель состоит в том, чтобы иметь возможность стилизовать линии по-разному в зависимости от этой новой информации (здесь дляэкземпляр деление на разделы). Таким образом, окончательный результат должен выглядеть следующим образом:
<div>
<span class="column1">
<a id="l1"/></a><span class="intro">aaaaa<span type="foo">aaa</span>aa</span>
<br id="l2"/><span class="intro">aaaaaaa</span>
</span>
<span class="column2">
<br id="l3"/><span class="intro main">aaabbbb</span>
<br id="l4"/><span class="main">bb<span>123</span>bbbbb</span>
<br id="l5"/><span class="main">bbbbbbb</span>
<br id="l6"/><span class="conclusion">ccccccc</span>
</span>
</div>
Вот xquery, который у меня есть до сих пор:
for $section in $sections/section
for $line in $s/@from to $s/@to
let $name := $section/@type
let $br := $text//*[contains(@id, concat('l', $line))]
let $newline := <span class="{$name}">{$text//*[contains(@id, concat('l', $line))]/following-sibling::node()[following-sibling::*[contains(@id, concat('l', $line+1))]]}</span>
return
($br, $newline)
Очевидно, что это не работает!
- У меня есть проблемы, когда линия принадлежит двум разделам. Например, я получаю
<br id="l3"/><span class="intro">...</span>
и <br id="l3"/><span class="main">...</span>
- , если строки были сгруппированы в
<span>
элементы для столбцов (или других уровней группировки), это теряется.
Я не имею понятия, как добраться до желаемого результата. Любая помощь будет принята с благодарностью!