以下分組解決方案不使用循環,並且在ItemGroup
之後處理任何其他同級元素。此外,僅使用基於MainItem
的小密鑰來標識組。
XSLT 1.0下撒克遜6.5.5
生產文:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="main" match="MainItem/ItemGroup" use="text()"/>
<xsl:template match="/Data">
<xsl:apply-templates select="MainItem"/>
</xsl:template>
<xsl:template match="MainItem">
<xsl:value-of select="ItemGroup"/><xsl:text>
</xsl:text>
<xsl:apply-templates select="ItemGroup[generate-id(.)=generate-id(key('main', current()/ItemGroup)[1])]"/>
</xsl:template>
<xsl:template match="ItemGroup">
<xsl:apply-templates select="/Data/*[ItemGroup = current()]/*/following-sibling::*"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="*">
<xsl:text>- </xsl:text><xsl:value-of select="."/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
應用在你的輸入,產生:
Foo
- Details
- Blah
Bar
- Details
- BlahBlah
Baz
- Details
- BlahBlahBlahBlahBlah
生成XML輸出:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="main" match="MainItem/ItemGroup" use="text()"/>
<xsl:template match="/Data">
<xsl:copy>
<xsl:apply-templates select="MainItem"/>
</xsl:copy>
</xsl:template>
<xsl:template match="MainItem">
<xsl:variable name="id" select="ItemGroup"/>
<Group id="{$id}">
<xsl:apply-templates select="ItemGroup[generate-id(.)=generate-id(key('main', current()/ItemGroup)[1])]"/>
</Group>
</xsl:template>
<xsl:template match="ItemGroup">
<xsl:copy-of select="/Data/*[ItemGroup = current()]/*/following-sibling::*"/>
</xsl:template>
</xsl:stylesheet>
生產:
<Data>
<Group id="Foo">
<ItemDetails>Details</ItemDetails>
<OtherDataDetails>Blah</OtherDataDetails>
</Group>
<Group id="Bar">
<ItemDetails>Details</ItemDetails>
<OtherDataDetails>BlahBlah</OtherDataDetails>
</Group>
<Group id="Baz">
<ItemDetails>Details</ItemDetails>
<OtherDataDetails>BlahBlahBlahBlahBlah</OtherDataDetails>
</Group>
</Data>
你能展示一下你的變換嗎? – 2011-05-31 20:10:10
好問題,+1。查看我的答案,找到一個完整的解決方案,它是迄今爲止最短和最有效的解決方案,不使用任何條件或'',幷包含對適當參考材料定義的主要觀點和鏈接的廣泛解釋或者教授這些基本的XSLT概念。 –
2011-06-01 03:40:55