Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml->xslt->html один из трех, Выбор, при трансформации, одного узла из 
:(
    Опции темы
HunterNomad
  Дата 26.1.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.1.2012

Репутация: нет
Всего: нет



Доброго времени суток.
С xml и xslt я только начинаю разбираться, потому могу путаться в терминах и понятиях. За это прошу не пинать.
Задача использовать один файл xml для меню сайта. Но, по необходимости, нудно бутеть только часть его трансформировать и отображать в html. 
Вот тестовый xml
Код

<?xml version="1.0" encoding="UTF-8"?>

<root>
<node>
    <category>
        <id>id1<id>
    </category>
    <content>
        <start namber="1" name="Start 1" path="/start 1">
            <menu namber="1" name="Menu 1" path="/menu 1">
                <submenu namber="1.1" name="Sub menu 1.1" path="/submenu 1.1"/>
                <submenu namber="1.2" name="Sub menu 1.2" path="/submenu 1.2"/>
            </menu>
        </start>
        <start namber="2" name="Start 2" path="/start 2">
            <menu namber="2" name="Menu 2" path="/menu 2">
                <submenu namber="2.1" name="Sub menu 2.1" path="/submenu 2.1"/>
                <submenu namber="2.2" name="Sub menu 2.2" path="/submenu 2.2">
                    <item namber="2.2.1" name="Item menu 2.2.1" path="/itemmenu 2.2.1"/>
                    <item namber="2.2.2" name="Item menu 2.2.2" path="/itemmenu 2.2.2"/>
                </submenu>
            </menu>
            <menu namber="3" name="Menu 3" path="/menu 3">
                <submenu namber="3.1" name="Sub menu 3.1" path="/submenu 3.1"/>
                <submenu namber="3.2" name="Sub menu 3.2" path="/submenu 3.2"/>
                <submenu namber="3.3" name="Sub menu 3.3" path="/submenu 3.3"/>
            </menu>
        </start>
    </content>
</node>
<node>
    <category>
        <id>id2<id>
    </category>
    <content>
        <start namber="1" name="Start 1" path="/start 1">
            <menu namber="1" name="Menu 1" path="/menu 1">
                <submenu namber="1.1" name="Sub menu 1.1" path="/submenu 1.1"/>
                <submenu namber="1.2" name="Sub menu 1.2" path="/submenu 1.2"/>
            </menu>
        </start>
        <start namber="2" name="Start 2" path="/start 2">
            <menu namber="2" name="Menu 2" path="/menu 2">
                <submenu namber="2.1" name="Sub menu 2.1" path="/submenu 2.1"/>
                <submenu namber="2.2" name="Sub menu 2.2" path="/submenu 2.2">
                    <item namber="2.2.1" name="Item menu 2.2.1" path="/itemmenu 2.2.1"/>
                    <item namber="2.2.2" name="Item menu 2.2.2" path="/itemmenu 2.2.2"/>
                </submenu>
            </menu>
            <menu namber="3" name="Menu 3" path="/menu 3">
                <submenu namber="3.1" name="Sub menu 3.1" path="/submenu 3.1"/>
                <submenu namber="3.2" name="Sub menu 3.2" path="/submenu 3.2"/>
                <submenu namber="3.3" name="Sub menu 3.3" path="/submenu 3.3"/>
            </menu>
        </start>
    </content>
</node>
<node>
    <category>
        <id>id3<id>
    </category>
    <content>
        <start namber="1" name="Start 1" path="/start 1">
            <menu namber="1" name="Menu 1" path="/menu 1">
                <submenu namber="1.1" name="Sub menu 1.1" path="/submenu 1.1"/>
                <submenu namber="1.2" name="Sub menu 1.2" path="/submenu 1.2"/>
            </menu>
        </start>
        <start namber="2" name="Start 2" path="/start 2">
            <menu namber="2" name="Menu 2" path="/menu 2">
                <submenu namber="2.1" name="Sub menu 2.1" path="/submenu 2.1"/>
                <submenu namber="2.2" name="Sub menu 2.2" path="/submenu 2.2">
                    <item namber="2.2.1" name="Item menu 2.2.1" path="/itemmenu 2.2.1"/>
                    <item namber="2.2.2" name="Item menu 2.2.2" path="/itemmenu 2.2.2"/>
                </submenu>
            </menu>
            <menu namber="3" name="Menu 3" path="/menu 3">
                <submenu namber="3.1" name="Sub menu 3.1" path="/submenu 3.1"/>
                <submenu namber="3.2" name="Sub menu 3.2" path="/submenu 3.2"/>
                <submenu namber="3.3" name="Sub menu 3.3" path="/submenu 3.3"/>
            </menu>
        </start>
    </content>
</node>
</root>


Для трансформации xsl
Код

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" />

    <xsl:template match="root">
        <ul>
            <xsl:apply-templates select="content"/>
        </ul>
    </xsl:template>
    
    <xsl:template match="start">
        <li>
            <a href="{@path}">
                <xsl:value-of select="@name"/>
            </a>
        </li>
        <ul>
            <xsl:apply-templates select="menu"/>
        </ul>
    </xsl:template>
  
    <xsl:template match="start/menu">
        <li>
            <a href="{@path}">
                <xsl:value-of select="@name"/>
            </a>
        </li>
        <ul>
            <xsl:apply-templates select="submenu"/> 
        </ul>
    </xsl:template>
    
    <xsl:template match="menu/submenu">
        <li>
            <a href="{@path}">
                <xsl:value-of select="@name"/>
            </a>
        </li>
        <xsl:if test="item">
            <ul>
                <xsl:apply-templates select="item"/> 
            </ul>
        </xsl:if>
    </xsl:template>
    
    <xsl:template match="submenu/item">
        <li>
            <a href="{@path}">
                <xsl:value-of select="@name"/>
            </a>
        </li>
    </xsl:template>
</xsl:stylesheet>


Этот xsl обрабатывает весь xml, а мне нужно тоько часть <content> ... </content> с условием что id='id2'  

С неделю не могу найти решение. Подскажите как это сожно сделать.
За ранее спасибо.

PM MAIL   Вверх
diadiavova
Дата 26.1.2012, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Если проблема в выражении XPath, то вот как-то так.
content[preceding-sibling::category[1]/id[1]/text() = 'id2']

Это сообщение отредактировал(а) diadiavova - 26.1.2012, 18:56


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.