Я изо всех сил пытаюсь создать список, который будет отображаться при условии родительского узла («папка») с атрибутом «свернутый», установленным в «да» или «нет».
Результат должен отображать только первые два уровня списка, а не третий уровень, как показано ниже.
- первый. Уровень: дисплей
- второй. Уровень: дисплей
- третий. Уровень: НЕТ дисплея
Идея состоит в том, чтобы проверить атрибут 'folder' <folder folded="yes">
с помощью <xsl:if test="not(parent::yes)">
.
Это должно претендовать на 3-е. Уровень НЕ отображается, но почему-то он не делает то, что я хочу.
Я, вероятно, использую неправильную конструкцию и / или синтаксис.
Помощь высоко ценится, спасибо.
Структура XML с некоторым содержанием:
<xbel>
<folder folded="yes">
<level>1</level>
<title>bookmarks</title>
<desc>my bookmarks</desc>
<folder folded="no">
<level>2</level>
<title>Android</title>
<desc>my Android</desc>
<bookmark href="http://www.phonesreview.co.uk/">
<title>HTC Sync 3.0.5422 Update: Aria, Desire, Hero, Legend</title>
<desc>The new HTC Sync 3.0.5422 update will be most welcome...</desc>
</bookmark>
<folder folded="no">
<level>3</level>
<title>Apps</title>
<desc>Android Apps</desc>
<bookmark href="http://www.androidzoom.com/">
<title>Android Communication Apps</title>
<desc>Download Communication Apps for Android.</desc>
</bookmark>
<bookmark href="http://www.htc.com/">
<title>HTC - Android</title>
<desc>Apps for HTC-Android.</desc>
</bookmark>
</folder>
</folder>
</folder>
</xbel>
XSLT:
<!--creates a nested list of elements named 'folder'-->
<xsl:template match="folder" mode="linklist">
<li>
<xsl:if test="folder/level = 2">
Level:<xsl:value-of select="level"/> /
Title:<xsl:value-of select="title"/> /
Desc:<xsl:value-of select="desc"/>
<ul>
<xsl:apply-templates mode="linklist" />
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template match="bookmark" mode="linklist">
<li> <!-- this bookmark is just another item in the list of bookmarks -->
<!-- the title -->
<a rel="nofollow" href="{@href}"><xsl:value-of select="title"/></a>
<!-- the description -->
<xsl:if test="desc">
<span class="bookmarkDesc">
<xsl:value-of select="desc"/>
</span>
</xsl:if>
</li>
</xsl:template>
Таблица стилей HTML
<body>
<ul>
<xsl:apply-templates mode="linklist" />
</ul>
</body>
Сгенерированный вывод (уровни: 1-3)
Level:1 / Title:bookmarks / Desc:my bookmarks
Level:2 / Title:Android / Desc:my Android
HTC Sync 3.0.5422 Update: Aria, Desire, Hero, Legend ...
Level:3 / Title:Apps / Desc:Android Apps
Android Communication AppsDownload Communication Apps for Android.
HTC - AndroidApps for HTC-Android.
Ожидаемый результат: (уровни: 1-2)
Level:1 / Title:bookmarks / Desc:my bookmarks
Level:2 / Title:Android / Desc:my Android
HTC Sync 3.0.5422 Update: Aria, Desire, Hero, Legend ...
Я попробовал этот шаблон, но он выводит последние два узла, мне нужны два первых узла.
<xsl:template match="folder[parent::folder/@folded = 'yes']" mode="linklist">