我有一个以下结构的XML文件
<root>
<Row>
<KeyName>A</KeyName>
.....
</Row>
<Row>
<KeyName>B</KeyName>
.....
</Row>
<Row>
<KeyName>A</KeyName>
.....
</Row>
<Row>
<KeyName>B</KeyName>
.....
</Row>
<Row>
<KeyName>C</KeyName>
.....
</Row>
</root>
我想为xml-fo转换发表声明
我需要在所有KeyNames上循环,但每个KeyName只需一次。我的问题是,我不知道将使用哪些KeyNames以及它们出现的频率。树的结构/深度是恒定的。
目标:
Block KeyName/text()=A
Row data
Row data
Row data
..
Block KeyName/text()=B
Row data
Row data
..
继续使用所有现有(但未知)的KeyNames。
答案 0 :(得分:0)
也许它可以帮助其他人。 经过一些测试和更多的研究,我找到了一个名为&#34; Muenchian grouping&#34;的例行程序。我尝试了不同的例子,直到找到合适的例子。 下面你将找到xslt转换文件的代码,它引用了我的问题的数据。
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:key name="RowbyKeyName" match="Row" use="KeyName" />
<xsl:template match="root">
<ul>
<xsl:for-each select="Row[generate-id() = generate-id(key('RowbyKeyName', KeyName)[1])]" >
<li>
KeyName: <xsl:value-of select="KeyName" />
<ul>
<xsl:for-each select="key('RowbyKeyName', KeyName)" >
<li>
<xsl:value-of select="..." />
....
Row Data
....
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>