gpt4 book ai didi

xslt - xsl 在其他节点之间对节点进行分组?

转载 作者:行者123 更新时间:2023-12-02 11:57:22 26 4
gpt4 key购买 nike

我不知道如何创建 xsl 将某些节点分组在其他节点之间。基本上,每次我看到“SPLIT”时,我都必须结束 div 并创建一个新的。

xml 如下所示:

<data name="a" />
<data name="b" />
<data name="c" />
<data name="SPLIT" />
<data name="d" />
<data name="e" />
<data name="SPLIT" />
<data name="f" />
<data name="g" />
<data name="h" />

输出需要如下所示

<div>
a
b
c
</div>

<div>
d
e
</div>

<div>
f
g
h
</div>

我知道如何通过“作弊”来做到这一点,但想知道是否有正确的方法:

<div>
<xsl:for-each select="data">
<xsl:choose>
<xsl:when test="@name='SPLIT'">
<xsl:text disable-output-escaping="yes"> &lt;/div&gt; &lt;div&gt;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@name"/>
</xsl:otherwise>
</xsl:for-each>
</div>

最佳答案

这个样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="node()">
<xsl:apply-templates
select="node()[1]|following-sibling::node()[1]"/>
</xsl:template>
<xsl:template match="data">
<div>
<xsl:call-template name="open"/>
</div>
<xsl:apply-templates
select="following-sibling::data[@name='SPLIT'][1]
/following-sibling::node()[1]"/>
</xsl:template>
<xsl:template match="data" mode="open" name="open">
<xsl:value-of select="concat(@name,'&#xA;')"/>
<xsl:apply-templates select="following-sibling::node()[1]"
mode="open"/>
</xsl:template>
<xsl:template match="data[@name='SPLIT']" mode="open"/>
</xsl:stylesheet>

输出:

<div>
a
b
c
</div>
<div>
d
e
</div>
<div>
f
g
h
</div>

注意:细粒度遍历。

关于xslt - xsl 在其他节点之间对节点进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4036161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com