XSLT 1.0. Выбрать и обработать только узлы с текстом
Здравствуйте.
Подскажите, пожалуйста, кому не трудно, каким образом можно "вырезать" из документа текстовые узлы (или узлы, содержащие непосредственно текст) и "обернуть" их в пару элементов, сохраняя атрибуты родителя?
То есть, к примеру, есть такой кусок документа:
<div id="ui_combo_bodies_all_4371"><div id="cmbBody_src_combo" class="dropdown-menu ui-cmb-body ui-cmb-body-hidden">
<h1 margin-left="15" id="header">Заголовок</h1>
<div class=" ui-cmb-content-container" >
<div class="ui-cmb-pre-content">
<div class="ui-cmb-scrollable"><div id="ccat_tree" class="ui-tree">
<ul>
<li class="lvl-1">Вопрос по работе подсистемы</li>
<li class="lvl-1">Вопрос по методологии</li>
<li class="lvl-1">Ошибка в работе подсистемы</li>
<li class="lvl-1">Ошибка в данных</li>
<li class="lvl-1">Не нашли данные?</li>
</ul></div></div>
<div class="ui-resizable-helper"></div>
</div>
<p border="1">Доп. параграф</p>
</div>
</div>
А нужно получить:
<block>
<string margin-left="15" id="header">
Заголовок
</string>
</block>
<block>
<string class="lvl-1">
Вопрос по работе подсистемы
</string>
</block>
<block>
<string class="lvl-1">
Вопрос по методологии
</string>
</block>
<block>
<string class="lvl-1">
Ошибка в работе подсистемы
</string class="lvl-1">
</block>
<block>
<string class="lvl-1">
Ошибка в данных
</string>
</block>
<block>
<string class="lvl-1">
Не нашли данные?
</string>
</block>
<block>
<string border="1">
Доп. параграф
</string>
</block>
Не могу найти, как это реализовать. Простое
<xsl:template match="p|h1|h2|h3|h4|h5|h6|h9|i|b|div|li">
<block>
<string>
<xsl:for-each select="@*">
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:apply-templates/>
</string>
</block>
</xsl:template>
или выбор через
<xsl:template match="*[text()]">
не помогают: получается простая замена вместо выбора текстовых узлов.
Был бы очень признателен за помощь.
Источник: Stack Overflow на русском