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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь, Как это сделать? 
V
    Опции темы
t77
  Дата 11.5.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток.
После долгих и мучительных попыток, не получается у меня сделать... smile 
Уважаемые коллеги и знатоки XPATH, помогите пожалуйста смастерить запрос...
Имеется хмл следующей структуры:
Код

<QUERY>
    <INFO>
        <ITEM>
            <ELEMENT id="1" sigmaId="25">
                <EXT_LINK>
                    <PARAM name="name" value="111"></PARAM>                    
                </EXT_LINK>
            </ELEMENT>
            <ELEMENT id="2" sigmaId="50">
                <BOOK>
                    <PARAM name="name" value="222"></PARAM>                    
                </BOOK>
            </ELEMENT>
            <ELEMENT id="2" sigmaId="25">
                <LESSON>
                    <PARAM name="name" value="333"></PARAM>                    
                </LESSON>
            </ELEMENT>
            <ELEMENT id="2" sigmaId="25">
                <CHAPTER>
                    <PARAM name="name" value="444"></PARAM>                    
                </CHAPTER>
            </ELEMENT>
        </ITEM>
    </INFO>
</QUERY>

Мне необходимо найти все те элементы, у которых атрибут "sigmaId" равен 25 и получить имя или название нода потомка. 
Тоесть если исходить из вышеприведенного мною примера я должен получить:
EXT_LINK и LESSON.
Я здесь пробовал разные варианты, но увы ничего не получается.
Код

<xsl:variable name="currentInfoPath" select="/QUERY/INFO/ITEM" />


    <xsl:for-each select="$currentInfoPath/ELEMENT[@sigmaId = '25']">        
        <!--Пытаюсь получить имя первого нода-->
        <xsl:variable name="firstChildNodeName">
            <xsl:value-of select="//name()"/>            
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="$firstChildNodeName ='EXT_LINK'">
                <!--Сделать определенные действия 1-->
            </xsl:when>
            <xsl:otherwise>
                <!--Сделать определенные действия 2-->
            </xsl:otherwise>
        </xsl:choose>        
    </xsl:for-each>

Я понимаю в строке:
"<xsl:value-of select="//name()"/>" есть синтаксическая ошибка!
Как это сделать правильно ?






PM MAIL   Вверх
t77
  Дата 11.5.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Судя по тому, что никто не отвечает можно сделать следующие выводы:
Или никто не знает как это сделать, в чем я сомневаюсь...
Или же я не понятно описал свой вопрос...
Так как склоняюсь больше ко второму варианту, опишу вопрос немного иначе.
И так, структура ХМЛ остается той же что я приводил выше.
Основываясь на ней, я прохожусь по всем элементам(ITEM/ELEMENT) и выполняю определенные действия.
При этом мне необходимо знать каждый раз если у данного элемента(ELEMENT) есть дочерний нод по имени EXT_LINK, если да, то сделать совсем другие рассчеты.
Петля(for-each) сориентированна на прохождении по нодам -ELEMENT.
Код

xsl:for-each select="$currentInfoPath/ELEMENT[@sigmaId = '25']

Мне необходимо поймать тот момент, когда у моего элемента(ELEMENT) имеется дочерний нод по имени- EXT_LINK
И так вопрос, как мне получать каждый раз в петле имя дочернего нода в виде стринга?
Заранее благодарю
PM MAIL   Вверх
diadiavova
Дата 11.5.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(t77 @  11.5.2010,  20:05 Найти цитируемый пост)
Мне необходимо найти все те элементы, у которых атрибут "sigmaId" равен 25 и получить имя или название нода потомка. 

Попробуй что-то в этом роде
Код

<xsl:for-each select="//*[@sigmaid = '25']/*[1]">
    <xsl:value-of select="name()" /><br />
</xsl:for-each>

Цитата(t77 @  11.5.2010,  21:30 Найти цитируемый пост)
Судя по тому, что никто не отвечает

Ну имей терпение ёмаё, иногда люди и несколько дней ждут.

Да и ещё
Модератор: Название темы должно отражать ее суть!

Это сообщение отредактировал(а) diadiavova - 11.5.2010, 21:48


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
t77
  Дата 13.5.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, diadiavova. smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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