这是https://stackoverflow.com/questions/5823938/overcoming-unclosed-tags-in-xsl
主题的后续问题这是基于Sharepoint列表的下拉菜单。菜单项可以随机添加到列表中,页面类型/页面分组字段确定它们在菜单中的位置。
我无法获得原始问题中提出的解决方案,该问题涉及“递归兄弟姐妹”工作,因此提出了一个可行的解决方法,但我确信可以使用一些精简。
我现在正在做的是指定页面组以确保子页面与正确的父页面一致。缺点是我必须指定每个页面组。问题是如何让xsl以编程方式识别父页面(类型1)及其子页面(类型2),而不指定它们是单独的? “linktitle”元素是页面组号,因此必须为每个页面重复它。
我想我正在寻找能够将具有相同页面组编号的每个项目组合在一起的东西,无论它是什么。我只能访问xsl 1.0。
XML
<Root>
<Schema>
<Field Type="Text" DisplayName="Page url" Required="FALSE" MaxLength="255" Name="Page_x0020_url"/>
<Field Type="Text" DisplayName="Page title" Required="FALSE" MaxLength="255" Name="Page_x0020_title"/>
<Field ReadOnly="TRUE" Type="Computed" Name="LinkTitle" DisplayName="Page group number"/>
<Field Type="Text" DisplayName="Page number" Required="FALSE" MaxLength="255" Name="Page_x0020_number"/>
<Field Type="Choice" DisplayName="Page type" Required="FALSE" Format="RadioButtons" FillInChoice="FALSE" Name="Page_x0020_type">
<Default>2</Default>
<CHOICES>
<CHOICE>1</CHOICE>
<CHOICE>2</CHOICE>
</CHOICES>
</Field>
</Schema>
<Data ItemCount="1">
<Row Page_x0020_url="" Page_x0020_title="" LinkTitle="" Page_x0020_number="" Page_x0020_type=""/>
</Data>
</Root>
XSL
<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
答案 0 :(得分:0)
使用以下“hack”可以实现。请注意下面未公开的div标签。
<xsl:if test="@ID mod 2 = 0" > <xsl:text disable-output-escaping="yes"><![CDATA[<div>]]></xsl:text></xsl:if>