Это дополнительный вопрос к теме в /5112621/preodolenie-nezakrytyh-tegov-v-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