我有自动生成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规范在其祖母的好意禁止使用sta ndard XPath preceding
或following
模板匹配器中的轴。 (并且无论如何,这需要进行一些调整来处理连续的三个ems。)
任何解决方案都比忘记在XSLT中执行此操作而只是在$ LANGUAGE_OF_CHOICE中运行replace('</em><em>', '')
最终结果?粗糙的要求:如果两个<em>
之间由任何东西(空格,文本,标签)分开,并且不需要合并它们,则应该至少生成有效的XML,如果连续有三个或更多个<em>
。处理嵌套在ems中的标签(包括其他ems)不是必需的。
(呵呵,我见过how to merge element using xslt?,这是相似但不相同的XSLT 2遗憾的是不能选择和提出的解决方案看起来可怕复杂。)
好问题,+1。查看我的答案,获取简短而完整的XSLT 1.0解决方案。 :) – 2010-10-29 04:44:41