Мне нужно превратить
<question>
<static><![CDATA[Static Data]]></static>
<debit-row />
<debit-row />
<credit-row />
<header><![CDATA[Header HTML 1]]></header>
<debit-row />
<debit-row />
<credit-row />
</question>
в
<p>Static Data</p>
<ul>
<li>
<table>
<tr><td> debit row </td></tr>
<tr><td> credit row </td></tr>
<tr><td> credit row </td></tr>
</table>
</li>
<li> Header HTML 1
<table>
<tr><td> debit row </td></tr>
<tr><td> debit row </td></tr>
<tr><td> credit row </td></tr>
</table>
</li>
</ul>
По сути, заголовок или строка дебета указывают на начало нового чанка.Каждый кусок - это элемент списка.Каждый набор или строки - это таблица (как правило, кредитные строки всегда идут последними, поэтому легко определить, когда начинать таблицу).
XSLT и XPATH кажутся очень сложными, и у меня очень тяжелые временапоиск всего, что я хочу сделать, поэтому, если у кого-то есть отличная ссылка, я был бы также признателен за это.
Я начал с этого xsl:
<xsl:template match="question">
<xsl:apply-templates select="static|header|debit-row[preceding-sibling::*[1] != header]" />
</xsl:template>
Этоне очень хорошее начало, потому что шаблоны вообще не применяются ни к одной дебетовой строке, но они должны применяться к самой первой дебетовой строке (перед ней нет элемента заголовка).Это выражение неверно?
Даже если я заставлю это работать, мне нужно найти способ сказать "Откройте <ul>
, если это самый первый заголовок или строка дебета", и яне уверен, как это сделать при применении шаблона заголовка / дебет-строки.У каждого дебетового ряда есть свой собственный xml, который нужно применить (ему нужны строка таблицы и тд).Я также должен соответствующим образом открывать и закрывать таблицу перед первой дебетовой строкой и после последней кредитной строки.
Я был бы очень признателен за любую помощь, поскольку застрял даже при том, что простое приведенное выше выражение xpath работает правильно.