Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Как выбрать один из трех с помощью xslt
Список форумов
 ->  XML


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
HunterNomad : 26
Новичок

СообщениеЯнв 26, 2012 16:16 
Ответить с цитатой
Доброго времени суток.
У меня структура вся сайта будет храниться в 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>





Для обработки всего xml написал (как мог) такой xslt

Код:
<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>





Все отрабатывается, но возникла подзадача.
Выбрать только часть <content> ... </content> при условии id='id2'
Вот тут я и встрял.
Получается или все выбрать, или ничего.
Подскажите как правильно оформить xslt файл.

Спасибо за ранее.
К началу Посмотреть профиль Отправить личное сообщение
Taky_ : 491
Бывалый

СообщениеЯнв 26, 2012 17:52 
Ответить с цитатой
Поидее:
<xsl:template match="//content[id='id2']">
должно помочь.
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4801
Я тут живу!
Откуда: Москва, Россия

СообщениеЯнв 27, 2012 10:58 
Ответить с цитатой
А я бы написал так: //node[category/id='id2']/content.

Писал навскидку, могу ошибаться.
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HunterNomad : 26
Новичок

СообщениеЯнв 27, 2012 12:17 
Ответить с цитатой
Спасибо, но увы не получилось. Crying or Very sad
К началу Посмотреть профиль Отправить личное сообщение
Taky_ : 491
Бывалый

СообщениеЯнв 27, 2012 13:17 
Ответить с цитатой
Фактически в math мы указываем условие сопоставления. Язык - xPath.
http://allxml.h1.ru/articles/xpath.htm

Там есть пример:
Код:
books/book[language='Russian']/name

Выбор книги на русском языке. Может сопоставление с корнем немного не так проходит?
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4801
Я тут живу!
Откуда: Москва, Россия

СообщениеЯнв 27, 2012 14:23 
Ответить с цитатой
Вопрос на засыпку автору. Вы этот xml прямо скопировали из рабочего файла? Ибо он даже не well-formed.
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Skipy : 4801
Я тут живу!
Откуда: Москва, Россия

СообщениеЯнв 27, 2012 14:30 
Ответить с цитатой
HunterNomad писал(а):
Спасибо, но увы не получилось. Crying or Very sad


После исправления синтаксиса xml проверил:

Код:
//node[category/id/text()='id2']/content


Это выражение выбирает нужный узел content
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> XML


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru