我有带有books属性的Xml文件,它有一个type属性,我想在UL LI html中显示类型和所有相同类型的元素,如下所示:
Assigning (instead of defining) a __getitem__ magic method breaks indexing 和我的xslt: Xml file in this link
任何帮助我将不胜感激?
答案 0 :(得分:0)
这是grouping
的情况(正如@Martin Honnen正确指出的那样),并且由于您使用的是XSLT 1.0,因此需要定义<xsl:key>
然后用于分组。
由于要在<titre>
上进行分组,密钥将被定义为
<xsl:key name="keyTitre" match="livre" use="titre" />
接下来,我们遍历使用密钥分组的所有<livre>
元素。
<xsl:for-each select="livre[generate-id() = generate-id(key('keyTitre', titre)[1])]">
最后,分组键的嵌套循环。
<xsl:for-each select="key('keyTitre', titre)">
以下是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:strip-space elements="*" />
<xsl:key name="keyTitre" match="livre" use="titre" />
<xsl:template match="bibliotheque">
<html>
<body>
<xsl:for-each select="livre[generate-id() = generate-id(key('keyTitre', titre)[1])]">
<ul>
<xsl:value-of select="titre" />
<xsl:for-each select="key('keyTitre', titre)">
<li>
<xsl:value-of select="concat(auteur/nom, ' ', auteur/prenom)" />
</li>
</xsl:for-each>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在输入XML上运行上面的XSLT会产生以下结果。由于输入XML为<titre>
提供了3个不同的值,因此输出中有3个<ul>
元素。
<html>
<body>
<ul>
t1
<li>n1 p1</li>
</ul>
<ul>
t2
<li>n2 p2</li>
</ul>
<ul>
t3
<li>n3 p3</li>
</ul>
</body>
</html>