У меня есть XML-файл в формате XBEL.Выход - вложенный список.Я хочу выводить только до 2-го уровня (включительно) узлов с именем «папка».Правило совпадения устанавливается соответствующим образом в шаблоне.Конечно, итоговый вывод HTML содержит пустой -tag.Как я могу сделать это правильно, чтобы шаблон прекратил вывод до создания пустых тегов <ul>
(без тегов <li>
)?Я предполагаю, что решение состоит в том, чтобы правильно указать условие теста.
Шаблон:
<xsl:template match="xbel/folder/folder/folder" mode="subfolderlist">
<li>
<span class="folderTitleLink"><xsl:value-of select="title" /></span>
</li>
<xsl:apply-templates mode="subfolderlist" />
</xsl:template>
XSLT:
...<!--<xsl:if test="not(xbel/folder/folder/folder)">-->
<xsl:if test="(child::folder)"> <!--do it as long as there are subfolders, the last node gets never listed-->
<div class="level-2">
<ul>
<xsl:apply-templates mode="subfolderlist" />
</ul>
</div>
</xsl:if>...
Структура XML:
<xbel>
<folder folded="yes">
<title>bookmarks</title>
<desc>my bookmarks</desc>
<folder folded="no">
<title>Level-1</title>
<desc>bla1</desc>
<bookmark href="http://www.xyz.com/">
<title>BM1-Level1</title>
<desc>Desc-BM1-Level1</desc>
</bookmark>
<folder folded="no">
<title>Level-2</title>
<desc>bla2</desc>
<bookmark href="http://www.xyz.com/">
<title>BM1-Level2</title>
<desc>Desc-BM1-Level2</desc>
</bookmark>
<folder folded="no">
<title>Level-3</title>
<desc>bla3</desc>
<bookmark href="http://www.xyz.com/">
<title>BM1-Level3</title>
<desc>Desc-BM1-Level3</desc>
</bookmark>
<folder folded="no">
<title>Level-4</title>
<desc>bla4</desc>
<bookmark href="http://www.xyz.com/">
<title>BM1-Level4</title>
<desc>Desc-BM1-Level4</desc>
</bookmark>
</folder>
</folder>
</folder>
</folder>
</folder></xbel>
здесь