У меня есть комки сгенерированного HTML делать глупые вещи, как это:Объединение последовательностей элементов в XSLT
<p>Hey it's <em>italic</em><em>italic</em>!</p>
И я хотел бы, чтобы размять, что вплоть до:
<p>Hey it's <em>italicitalic</em>!</p>
Мой первый попытка была вдоль этих линий ...
<xsl:template match="em/preceding::em">
<xsl:value-of select="$OPEN_EM"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="em/following::em">
<xsl:apply-templates/>
<xsl:value-of select="$CLOSE_EM"/>
</xsl:template>
Но, очевидно, XSLT спецификации в бабушкиной доброте запрещает использование ГНО ndard XPath preceding
или following
оси в шаблонах. (И это потребует некоторой настройки для обработки трех ems в строке в любом случае.)
Любые решения лучше, чем забывать об этом в XSLT и просто запускать в $ LANGUAGE_OF_CHOICE на конечный результат? Грубые требования: не следует комбинировать два <em>
, если они разделены чем-либо (пробелы, текст, теги), и, хотя он не должен их объединять, он должен хотя бы создать допустимый XML, если в строке есть три или более <em>
, Обработка тегов, вложенных в ems (включая другие ems), не требуется.
(И о, я видел how to merge element using xslt?, который похож, но не совсем то же XSLT 2 является, к сожалению, не вариант, а предлагаемые решения выглядят чудовищно сложным.).
Хороший вопрос, +1. См. Мой ответ для краткого и полного решения XSLT 1.0. :) –