XSLT 分组 [英] XSLT Grouping
本文介绍了XSLT 分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个带有两级(标题和行)标签的简单 XML,例如:
I have a simple XML with two levels (Header and Line) of tags such as:
<?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)上的行进行分组,以便我的输出如下:
I need to group the lines on sets of X (X=3 for example) lines so that my output is the following:
<?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?
How do I write a XSLT that can do this kind of transformation?
谢谢!
哦
推荐答案
以下转换产生所需的结果:
<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() < $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>
请注意以下事项:
使用XPath
mod
运算符找出每组vN<中的第一个
line
元素/code> 元素.
The use of the XPath
mod
operator to find out the firstline
element in every group ofvN
elements.
modes的使用,为了能够通过不同的模板处理不同的line
元素
The use of modes, in order to be able to process different line
elements by different templates
这篇关于XSLT 分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文