2012-06-28 35 views
0

我有一長串xml元素。使用xsl創建網站地圖/嵌套列表

每個元素都有一個ID和一個PARENT_ID。

我該如何製作基於此的網站地圖/嵌套列表?具有空值的元素是頂級父元素。

我想在HTML中顯示UL和LI的列表。

<ROOT> 
<SITEMAP> 
    <ARRAY> 
     <ID>1</ID> 
     <NAME>Test</NAME> 
     <PARENT_ID>NULL</PARENT_ID> 
    </ARRAY> 
    <ARRAY> 
     <ID>2</ID> 
     <NAME>Test2</NAME> 
     <PARENT_ID>3</PARENT_ID> 
    </ARRAY> 
    <ARRAY> 
     <ID>3</ID> 
     <NAME>Test3</NAME> 
     <PARENT_ID>NULL</PARENT_ID> 
    </ARRAY> 
    <ARRAY> 
     <ID>4</ID> 
     <NAME>Test4</NAME> 
     <PARENT_ID>1</PARENT_ID> 
    </ARRAY> 
    <ARRAY> 
     <ID>5</ID> 
     <NAME>Test5</NAME> 
     <PARENT_ID>4</PARENT_ID> 
    </ARRAY> 
</SITEMAP> 

+0

這已經是Xml格式的嵌套列表。你到底想做什麼?那麼你的意思是什麼*具有空值的元素*? –

+0

啊,sry ..缺乏一些信息..我想要一個UL列表和LIs的列表,其中所有的孩子都在他們的父母之下.. – ffffff01

+0

好吧,我明白了。現在總的任務很清楚,你能否描述你到底有多遠?在什麼時候卡住了?即在編寫XSLT代碼時,究竟是什麼造成了障礙? –

回答

1

關鍵模板將是這個樣子:

<xsl:template matches="ARRAY"> 
    <xsl:variable name="id" select="ID"/> 
    <output> 
     <!-- output goes here --> 
     ... 
     <!-- now process every ARRAY with a PARENT_ID equal to the current node's id. (I.e. its children.) --> 
     <xsl:apply-templates select="/ROOT/SITEMAP/ARRAY[PARENT_ID = $id]"/> 
    </output> 
</xsl:template> 

而且你踢它關閉:

<xsl:template matches="/"> 
    <xsl:apply-templates select="/ROOT/SITEMAP/ARRAY[PARENT_ID = 'NULL']"/> 
</xsl:template> 

注意的是,如果有任何週期在您的層次結構中,此轉換將無限運行。

+0

謝謝:)完美的工作! – ffffff01