gpt4 book ai didi

xslt - XSL 计数连续节点

转载 作者:行者123 更新时间:2023-12-02 05:37:33 24 4
gpt4 key购买 nike

我有类似的xml

<tr>
<td class="x">1</td>
<td class="x">2</td>
<td>3</td>
<td class="x">4</td>
<td class="x">5</td>
<td class="x">6</td>
<td class="x">7</td>
</tr>

我希望使用 xsl 的结果是:

\cont{1-2}
\cont{4-7}

我可以这样做吗?

最佳答案

此转换既短(25 行)又高效(使用键):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:key name="kFollowing" match="td[@class='x']"
use="concat(generate-id(..),
'+',generate-id(preceding-sibling::*
[not(self::td and @class='x')][1])
)"/>

<xsl:template match="/*">
<xsl:variable name="vGroup"
select="key('kFollowing', concat(generate-id(),'+'))"/>
<xsl:value-of select=
"concat('\cont{{',$vGroup[1],'-',$vGroup[last()],'}}','&#xA;')"/>
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="*/*">
<xsl:variable name="vGroup" select=
"key('kFollowing', concat(generate-id(..),'+', generate-id()))"/>
<xsl:value-of select=
"concat('\cont{{',$vGroup[1],'-',$vGroup[last()],'}}','&#xA;')"/>
</xsl:template>

<xsl:template match="td[@class='x']|text()"/>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<tr>
<td class="x">1</td>
<td class="x">2</td>
<td>3</td>
<td class="x">4</td>
<td class="x">5</td>
<td class="x">6</td>
<td class="x">7</td>
</tr>

产生了想要的、正确的结果:

  \cont{1-2}
\cont{4-7}

关于xslt - XSL 计数连续节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11451989/

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