Я группирую смежные «встроенные» элементы со следующим XSLT 2.0, но ни один из текстовых() узлов не копируется, кто-нибудь знает почему? Источник XML:XSLT2.0-Group Смежный не копирующий текст()
<para>
<p>some text</p>
<section>
<section>
<inline>inline text</inline>
<inline/>
<p>some more text</p>
<p/>
</section>
<para>
<p>dog</p>
<p/>
<p/>
<sub-para>
<p/>
<p/>
</sub-para>
</para>
</section>
</para>
Мой XSLT 2.0 таблица стилей имеет 2 шаблона спички (для текста()) и * (для любого элемента)
<xsl:template match="text()">
<xsl:copy />
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:for-each-group select="*" group-adjacent="boolean(self::inline)">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<grp><xsl:copy-of select="current-group()"/></grp>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
Результаты, которые я в настоящее время получают являются:
<para>
<p/>
<section>
<section>
<grp>
<inline>inline text</inline>
<inline/>
</grp>
<p/>
<p/>
</section>
<para>
<p/>
<p/>
<p/>
<sub-para>
<p/>
<p/>
</sub-para>
</para>
</section>
</para>
т.е. элементы скопированы, смежные встроенные элементы сгруппированы, но текстовые узлы не копируются.
Почему не вызывает apply-templates select = current-group() приводит к вызову шаблона text()?
Большое спасибо за любые ответы
Спасибо Тим, этот подход не работает для смешанного контента, например: 'code'
Таблица A: Пример
, где должны быть соединены два встроенных элемента. Текст потерян. Это простое требование, но я потратил дни на то, чтобы решить его с помощью XSLT 2 – user3101286Вы уверены, что текст потерян, потому что мне кажется, что это нормально, хотя я, возможно, неправильно понял точное требование! Я думаю, что это могло бы помочь, если бы вы могли отредактировать свой вопрос, чтобы показать пример со «смешанным контентом» и, что более важно, показать результат, который вы ожидаете в этом случае. Спасибо! –