Включите XML в XSLT и затем примените foreach - PullRequest
0 голосов
/ 28 июля 2010

У меня есть сайт с кодом XML + XSLT, который выводит меня на полноценный HTML-сайт. Теперь, чтобы сделать сайт более динамичным, я хочу разделить некоторые части документа: верхний и нижний колонтитулы и боковую панель. Я искал в Google, и я нашел это решение:

<xsl:param name="doc" select="document('menu.xml')"/>
<xsl:template match="/">
<html><head></head><body><xsl:for-each
select="$doc"><xsl:apply-templates/></xsl:for-each></body></html>
</xsl:template>

Я пытался применить это, и я могу заставить его работать. Вот способ, которым я пользуюсь:

Я изменил маршрут на "../menu.xml", потому что xsl находится внутри папки, это хорошо работает.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="menu" select="document('../menu.xml')"/>

    <xsl:template match="/">

более действительный и рабочий код, а затем:

<ul class="menu_top">
    <xsl:for-each select="$menu">
        <li>
            <a>
                <xsl:attribute name="href">
                    #<xsl:value-of select="link" />
                </xsl:attribute>

                <xsl:value-of select="name"/>
            </a>
        </li>
    </xsl:for-each>
</ul>
<xsl:for-each select="$menu">
    <div class="submenu"> 
        <xsl:attribute name="id">
            <xsl:value-of select="link" />
        </xsl:attribute>

        <ul>
            <xsl:for-each select="child">
                <li>
                    <a>
                        <xsl:attribute name="href">
                            <xsl:value-of select="link" />
                        </xsl:attribute>

                        <xsl:value-of select="name"/>
                    </a>
                </li>
            </xsl:for-each>
        </ul>
    </div>
</xsl:for-each>

Наконец, мой menu.xml:

<?xml version="1.0" encoding="utf-8"?>
   <menu>
        <category>
            <name>First</name>
            <link>menu-1</link>

            <child>
                <name>Child 1</name>
                <link>#</link>
            </child>

            <child>
                <name>Child 2</name>
                <link>#</link>
            </child>          
        </category>
</menu>

У меня есть больше категорий, но я упростила это.

Заранее спасибо!

1 Ответ

2 голосов
/ 28 июля 2010

Функция document() возвращает корень импортируемого документа.В данном случае это элемент menu, а не элемент category.Если вы хотите пройтись по категориям, используйте это вместо:

<xsl:for-each select="$menu/menu/category">
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...