【发布时间】:2012-02-02 21:00:38
【问题描述】:
我正在尝试从 xml/xsl 生成多级嵌套 html 列表。
例如,首选的 html 输出是:
<ul>
<li>Level 1 - Item 1</li>
<ul>
<li>Level 2 - Item 1-1</li>
<li>Level 2 - Item 1-2</li>
</ul>
<li> Level 1 - Item 2</li>
<ul>
<li>Level 2 - Item 2-1
<ul>
<li>Level 3 - Item 2-1-1</li>
<li>Level 3 - Item 2-1-2</li>
<li>Level 3 - Item 2-1-3</li>
</ul>
</li>
<li>Level 2 - Item 2-2
<ul>
<li>Level 3 - Item 2-2-1</li>
<li>Level 3 - Item 2-2-2</li>
</ul>
</li>
</ul>
XML:
<doc>
<item>
<one>Level 1 - Item 1</one>
<two>Level 2 - Item 1-1</two>
<two>Level 2 - Item 1-2</two>
</item>
<item>
<one>Level 2 - Item 2</one>
<two>Level 2 - Item 2-1</two>
<three>Level 3 - Item 2-1-1</three>
<three>Level 3 - Item 2-1-2</three>
<three>Level 3 - Item 2-1-3</three>
<two>Level 2 - Item 2-2</two>
<three>Level 3 - Item 2-2-1</three>
<three>Level 3 - Item 2-2-2</three>
</item>
</doc>
我糟糕的 XSL 尝试:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="doc/item">
<li><xsl:value-of select="one" />
<ul>
<xsl:for-each select="two">
<li><xsl:value-of select="."/>
<xsl:for-each select="../three"><ul><li><xsl:value-of select="."/></li></ul></xsl:for-each>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这就是我在下面得到的...请注意,当有 3 级项目时,所有项目都已合并,然后显示在两者之下。
<li>Level 1 - Item 1<ul>
<li>Level 2 - Item 1-1</li>
<li>Level 2 - Item 1-2</li>
</ul>
</li>
<li>Level 2 - Item 2<ul>
<li>Level 2 - Item 2-1<ul>
<li>Level 3 - Item 2-1-1</li>
</ul>
<ul>
<li>Level 3 - Item 2-1-2</li>
</ul>
<ul>
<li>Level 3 - Item 2-1-3</li>
</ul>
<ul>
<li>Level 3 - Item 2-2-1</li>
</ul>
<ul>
<li>Level 3 - Item 2-2-2</li>
</ul>
</li>
<li>Level 2 - Item 2-2<ul>
<li>Level 3 - Item 2-1-1</li>
</ul>
<ul>
<li>Level 3 - Item 2-1-2</li>
</ul>
<ul>
<li>Level 3 - Item 2-1-3</li>
</ul>
<ul>
<li>Level 3 - Item 2-2-1</li>
</ul>
<ul>
<li>Level 3 - Item 2-2-2</li>
</ul>
</li>
</ul>
</li>
请为我提供 1.0 解决方案,然后当然也展示 2.0 示例以帮助其他人。
谢谢!
【问题讨论】:
-
令我惊讶的是,人们试图用平面 XML 表达嵌套结构,然后最终挠头想知道如何将平面 XML 再次变为嵌套结构。如果您可以对那个 XML 做任何事情,请,从那里开始。 XML 结构没有意义。
-
对我来说,这听起来像是一个“请向我发送密码”问题。
-
@Michael:我已经在研究解决方案,请耐心等待。尽管如此,我的第一条评论是正确的。 XML 根本没有用处,如果你有机会改变它,你应该改变它。
-
谢谢 - 我可以更改其中任何一个.. 供个人使用/学习.. 我只是想要最终结果输出.. 非常感谢您的帮助.. 我是 xsl/xml 的新手.
-
如果可以更改,请正确嵌套 XML,而不是将
<one>、<two>、<three>节点都放在同一级别。为了这个问题,我将发布一个可以与您的 XML 一起使用的解决方案。当你看到它时,我相信你会明白我的意思。
标签: html xml xslt nested-lists html-lists