XSLT: остановить вывод списка при условии if-test (или чего-то еще) - PullRequest
1 голос
/ 25 августа 2011

У меня есть 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>

здесь

1 Ответ

1 голос
/ 25 августа 2011

Вам нужен шаблон с шаблоном совпадения, как показано ниже :

<xsl:template match="folder[not(ancestor::folder[3])]" 
              mode="subfolderlist"> 

  <!-- Your processing here -->

</xsl:template>

Также замените это :

<xsl:if test="(child::folder)">

с

<xsl:if test="folder and not(ancestor::folder[2])">  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...