使用xsl创建站点地图/嵌套列表

时间:2012-06-28 10:44:38

标签: xml xslt

我有一长串的xml元素。

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

如何基于此制作站点地图/嵌套列表?具有null值的元素是顶级父元素。

我想在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>

1 个答案:

答案 0 :(得分: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>

请注意,如果层次结构中存在任何周期,则此转换将无限运行。