通过转换动态分组XSLT节点
我试图通过XSLT转换创建这样的页面 页数通过转换动态分组XSLT节点,xslt,transform,foreach,Xslt,Transform,Foreach,我试图通过XSLT转换创建这样的页面 页数 第1页 第2页 链接 链接1 链接2 这是xml <siteMenu> <Pages> <title>page1</title> </Pages> <Pages> <title>page2</title> </Pages> <Links> <title>link1<
- 第1页
- 第2页
- 链接1
- 链接2
<siteMenu>
<Pages>
<title>page1</title>
</Pages>
<Pages>
<title>page2</title>
</Pages>
<Links>
<title>link1</title>
</Links>
<Links>
<title>link2</title>
</Links>
</siteMenu>
第1页
第2页
链接1
链接2
我试着用
<xsl:for-each select="*"> and <xsl:for-each-group select="*" group-by="@v">
和
但是这给了我每个元素,但是我如何根据父节点将它们分离出来呢
我还希望使其动态化,这样,如果我在siteMenu中添加另一项,它将适当地更新xslt 您正在
选择所有内容(*
)
使用select=“Pages”
选择页面,使用select=“Links”
选择链接
了解XPath表达式。您正在选择所有内容(*
)
使用select=“Pages”
选择页面,使用select=“Links”
选择链接
了解XPath表达式。我将从
<ul>
<xsl:for-each select="//Pages">
<li><xsl:value-of select="./title"/></li>
</xsl:for-each>
</ul>
然后从那里继续。我将从
<ul>
<xsl:for-each select="//Pages">
<li><xsl:value-of select="./title"/></li>
</xsl:for-each>
</ul>
然后从那里继续。所以您希望按节点名称分组。在XML节点中存储比实际结构信息更多的信息并不是最好的主意,但您可以这样做:
<siteMenu>
<Pages>
<title>page1</title>
</Pages>
<Pages>
<title>page2</title>
</Pages>
<Links>
<title>link1</title>
</Links>
<Links>
<title>link2</title>
</Links>
<Sites>
<title>site1</title>
</Sites>
<Sites>
<title>site2</title>
</Sites>
</siteMenu>
第1页
第2页
链接1
链接2
地点1
站点2
此XSLT 2.0转换(仅限相关片段):
或此XSLT 1.0转换(仅限相关片段):
提示:您可能需要考虑使用这样的XML,这显然更符合您的站点结构,并且您不需要分组来正确输出它
<siteMenu>
<section name="Pages">
<title>page1</title>
<title>page2</title>
</section>
<section name="Links">
<title>link1</title>
<title>link2</title>
</section>
<section name="Sites">
<title>site1</title>
<title>site2</title>
</section>
</siteMenu>
第1页
第2页
链接1
链接2
地点1
站点2
因此您希望按节点名称分组。在XML节点中存储比实际结构信息更多的信息并不是最好的主意,但您可以这样做:
<siteMenu>
<Pages>
<title>page1</title>
</Pages>
<Pages>
<title>page2</title>
</Pages>
<Links>
<title>link1</title>
</Links>
<Links>
<title>link2</title>
</Links>
<Sites>
<title>site1</title>
</Sites>
<Sites>
<title>site2</title>
</Sites>
</siteMenu>
第1页
第2页
链接1
链接2
地点1
站点2
此XSLT 2.0转换(仅限相关片段):
或此XSLT 1.0转换(仅限相关片段):
提示:您可能需要考虑使用这样的XML,这显然更符合您的站点结构,并且您不需要分组来正确输出它
<siteMenu>
<section name="Pages">
<title>page1</title>
<title>page2</title>
</section>
<section name="Links">
<title>link1</title>
<title>link2</title>
</section>
<section name="Sites">
<title>site1</title>
<title>site2</title>
</section>
</siteMenu>
第1页
第2页
链接1
链接2
地点1
站点2
问题是我想让它变得动态。这样我就可以添加另一个名为“站点”的节点,它会将其添加到菜单中。问题是我想让它成为动态的。因此,我可以添加另一个名为“站点”的节点,它会将其添加到菜单中。请参阅我对Oded的回复,了解如何使其成为动态的。请参阅我对Oded的回复,了解如何使其成为动态的。这将适用于XSLT 2.0,但不适用于1.0。那我就得另找一条路了。@scott:但你自己在问题中对每个组都使用了,
,没有留下任何迹象表明你在使用XSLT 1.0。我只是假设您使用的是2.0…将添加XSLT1.0解决方案。我找到了一个理想的解决方案。工作得很好。@scott:这个答案所做的是Muenchian分组。这适用于XSLT2.0,但不适用于1.0。那我就得另找一条路了。@scott:但你自己在问题中对每个组都使用了,
,没有留下任何迹象表明你在使用XSLT 1.0。我只是假设您使用的是2.0…将添加XSLT1.0解决方案。我找到了一个理想的解决方案。斯考特:这个答案的作用是明钦分组。