2012-06-28 2 views
0

Ive получил длинный список элементов xml.Создание карты сайта/вложенного списка с помощью xsl

Каждый элемент получил идентификатор и PARENT_ID.

Как я могу создать карту сайта/вложенный список на основе этого? Элементами с нулевым значением являются верхние родительские элементы.

Я хочу показать список с UL и LI`s в HTML.

<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 .. Отсутствует какая-то информация .. Я хочу список HTML с UL и LI, где весь ребенок находится под их родителями. – 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

Смежные вопросы