XSLT:在 元素,如何更换一个换行符( )用连续 元件?

问题描述 投票:0回答:3

我试图用内<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>

但它不验证。

预期结果 :

<para>
   <alinea>
     subtext
   </alinea>
   <alinea>
     some more text
   </alinea>
   <alinea>
     some more subtext
   </alinea>
 </para>
xslt xpath xslt-2.0 line-breaks
3个回答
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>

但是:四联zxsw POI


1
投票

概率你可以使用这样的事情:

https://xsltfiddle.liberty-development.net/6r5Gh2Q

-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> 更换<br>

</alinea><alinea>

什么更漂亮?

© www.soinside.com 2019 - 2024. All rights reserved.