我正在尝试将包含<p>
个元素的<br/>
元素转换成几个<alinea>subtext</alinea>
。例如:
<p>subtext<br/>some more text<br/> some more subtext</p>
由于以前的<p>
模板已经打开了<br/>
元素,所以我希望将以前的</alinea><alinea>
替换为<p>
。
<alinea>
但这是无效的。
预期结果:
<xsl:template match="p">
<para><alinea><xsl:apply-templates/></alinea></para>
</xsl:template>
<xsl:template match="br">
</alinea><xsl:apply-templates/><alinea>
</xsl:template>
答案 0 :(得分:1)
可能您可以使用以下内容:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="p">
<para>
<xsl:apply-templates/>
</para>
</xsl:template>
<xsl:template match="text()">
<aline>
<xsl:value-of select="."/>
</aline>
</xsl:template>
<xsl:template match="br"/>
<xsl:template match="div">
<blockquote>
<xsl:value-of select="."/>
</blockquote>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
这在XSLT 2.0中非常容易做到:
<xsl:template match="p">
<para>
<xsl:for-each-group select="node()" group-starting-with="br">
<alinea>
<xsl:copy-of select="current-group()[not(self::br)]" />
</alinea>
</xsl:for-each-group>
</para>
</xsl:template>
答案 2 :(得分:-1)
我发现了一种(肮脏的)方式,将<br>
替换为</alinea><alinea>
:
<xsl:template match="br">
<xsl:value-of disable-output-escaping="yes">
</alinea><alinea>
</xsl:value-of>
</xsl:template>
有什么漂亮的吗?