gpt4 book ai didi

xslt - 编写 XSLT 分组

转载 作者:行者123 更新时间:2023-12-02 11:41:29 24 4
gpt4 key购买 nike

我有一个简单的 XML,其中包含两个级别(标题和行)标签,例如:

<?xml version="1.0"?>
<Header>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</Header>

我需要将行分组为 X(例如 X=3)行,以便我的输出如下:

<?xml version="1.0"?>
<Header>
<set>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
</set>
<set>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
</set>
<set>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</set>
</Header>

如何编写可以进行此类转换的 XSLT?

最佳答案

以下转换产生所需的结果:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:variable name="vN" select="3"/>

<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates
select="line[position() mod $vN = 1]"/>
</xsl:copy>
</xsl:template>

<xsl:template match="line">
<set>
<xsl:apply-templates mode="copy" select=
".
|
following-sibling::line[position() &lt; $vN]"/>
</set>
</xsl:template>

<xsl:template match="line" mode="copy">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<Header>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</Header>

结果是:

<Header>
<set>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
</set>
<set>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
</set>
<set>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</set>
</Header>

请注意以下事项:

  1. 使用 XPath mod 运算符找出每组 vN< 中的第一个 line 元素 元素。

  2. 模式的使用,以便能够通过不同的模板处理不同的line元素

关于xslt - 编写 XSLT 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507263/

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