2011-06-18 47 views
-1

這是https://stackoverflow.com/questions/5823938/overcoming-unclosed-tags-in-xsl分組項與XSL 1.0

的後續問題線程這是一個下拉菜單基於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 
+2

你忘了解釋幾乎所有的事情 - 爲什麼人們甚至應該猜測?不要說因缺少縮進而導致XML和代碼不可讀。不要說沒有想要的產出,也沒有給出解釋什麼是轉換的期望屬性。失敗! –

+0

@ Dimitre-對不起,解釋是在我連接到的問題中,但我擴展了我在這裏尋找的東西。 – matt

+0

在上面的輸入中應用的變換會生成一個空列表。你正在談論頁面類型和頁面組,假設有人能夠理解你的意思。我讀了這個問題4次,但仍然沒有得到你所要求的。 –

回答

0

這可能是使用下面的 「黑客」。請注意下面未封閉的div標籤。

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

對不起,標題有點誤導,因爲它跟在前面的問題,並且問題已經改變了一點,所以我只是改變了標題。再一次,轉換工作正常,我只是想簡化它。你能詳細說明你的建議如何做到嗎? – matt

+0

它不會幫助您的第一個問題。我的代碼片段展示瞭如何在xsl的if語句中使用非封閉標籤。 –