Html 使用xsl 1.0对Sharepoint列表中的项目进行分组

Html 使用xsl 1.0对Sharepoint列表中的项目进行分组,html,xml,xslt,Html,Xml,Xslt,这是一个后续问题的线程在 这是基于Sharepoint列表的下拉菜单。菜单项可以随机添加到列表中,页面类型/页面分组字段确定它们在菜单中的位置 我无法获得原始问题中提出的解决方案,该解决方案涉及“递归兄弟姐妹”的工作,因此提出了一个可行的解决方案,但我确信可以使用一些简化 我现在要做的是指定页面组,以确保子页面与正确的父页面匹配。缺点是我必须指定每个页面组。问题是如何让xsl以编程方式识别父页面(类型1)及其子页面(类型2),而不指定它们各自是什么?“linktitle”元素是页面组号,因此必须

这是一个后续问题的线程在

这是基于Sharepoint列表的下拉菜单。菜单项可以随机添加到列表中,页面类型/页面分组字段确定它们在菜单中的位置

我无法获得原始问题中提出的解决方案,该解决方案涉及“递归兄弟姐妹”的工作,因此提出了一个可行的解决方案,但我确信可以使用一些简化

我现在要做的是指定页面组,以确保子页面与正确的父页面匹配。缺点是我必须指定每个页面组。问题是如何让xsl以编程方式识别父页面(类型1)及其子页面(类型2),而不指定它们各自是什么?“linktitle”元素是页面组号,因此必须对每个页面重复该元素

我想我正在寻找的东西是,用相同的页面组编号对每个项目进行分组,而不管那是什么。我只能访问xsl 1.0

XML


2.
1.
2.
XSL


G
这可以通过以下“黑客”实现。注意下面未关闭的div标签

 <xsl:if test="@ID mod 2 = 0" > <xsl:text disable-output-escaping="yes"><![CDATA[<div>]]></xsl:text></xsl:if>
]>

你几乎忘了解释所有的事情——为什么人们还要猜测呢?更不用说,由于缺少缩进,XML和代码是不可读的。更不用说没有提供想要的输出,也没有解释转换的期望属性。失败@Dimitre抱歉,解释在我链接到的问题中,但我在这里扩展了我要查找的内容。您对上面输入应用的转换将生成一个空列表。您正在谈论页面类型和页面组,假设有人能够理解您的意思。这个问题我读了4遍,但仍然没有得到您的要求。Sharepoint列表中的每个项目都分配了一个页面组id(“linktitle”)和一个页面类型(“page_x0020_type”)。这将列表项分组在一起,并将它们标识为父页面或子页面,效果良好。输出是一个简单的css驱动的下拉菜单。我想做的是,不必指定页面组号,自动将具有相同组id的页面分组。然后通过对组id进行排序来控制顺序。很抱歉,标题有点误导,因为它是先前问题的后续,并且该问题发生了一些变化,所以我只是更改了标题。再一次,转换工作正常,我只是想简化它。你能详细说明你的建议是如何做到的吗?这对你最初的问题没有帮助。我的代码片段展示了如何在xsl中的if语句中使用非封闭标记。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" /> 
  <xsl:template match="/">

<!--  Render contents -->
<ul id ="navbar" class="">
<li>
 <xsl:for-each select="//Data/Row">
  <xsl:if test="./@LinkTitle = 1">
   <xsl:if test="./@Page_x0020_type = 1">
<a href="{./@Page_x0020_url}">         
<xsl:value-of select = "./@Page_x0020_title" />
</a>
     </xsl:if></xsl:if></xsl:for-each>
<ul>
<xsl:for-each select="//Data/Row">
 <xsl:sort select="./@Page_x0020_number" data-type="number"/>
  <xsl:if test="./@LinkTitle = 1">
   <xsl:if test="./@Page_x0020_type = 2">
<li>
<a href="{@Page_x0020_url}"> 
     <xsl:value-of select = "@Page_x0020_title" />
</a></li>
 </xsl:if></xsl:if></xsl:for-each>
</ul>
</li>
<!---REPEAT ABOVE FOR EACH PAGE GROUP-->
</ul>
</xsl:template>
 </xsl:stylesheet>G
 <xsl:if test="@ID mod 2 = 0" > <xsl:text disable-output-escaping="yes"><![CDATA[<div>]]></xsl:text></xsl:if>