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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл выводит не все элементы 
:(
    Опции темы
neokortex
Дата 20.6.2011, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть XML:

Код

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <t m="one">One</t>
    <t m="two">Two</t>
    <t m="three">Three</t>
    <t m="four">Four</t>
    <t m="five">Five</t>
    <elements>
        <element id="1">
            <et n="65"> Element One - 65</et>
            <et n="69"> Element One - 69 </et>
        </element>
        <element id="3">
            <et n="37">Element Three - 37</et>
        </element>
        <element id="2">
            <et n="66">Element Two - 66</et>
        </element>
    </elements>
</root>

И есть такой XSLT:

Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    <xsl:template match="/">
        <xsl:value-of select="//t[@m='three']" /> <!-- это преобразование работает -->
        <br /><br /><br /><br /><br /><br />
        <!-- преобразование ниже НЕ работает  :( -->
        <xsl:for-each select="//elements/element[@id='1']">
            <xsl:sort order="ascending" />
            <xsl:value-of select="et" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>


В результате - "Element One - 65" мне показывет, а "Element One - 69" - нет. 

Помогите, пожалуйста, разобраться.
PM MAIL   Вверх
diadiavova
Дата 20.6.2011, 08:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Проблема в строке
Код

<xsl:value-of select="et" />

Дело в том, что et возвращет коллекцию элементов(как ты и ожидаешь), но value-of ожидает выражение, возвращающее один узел, в результате происхдит неявное приведение типов, а в xslt, когда тип коллекции узлов приводится к типу узла, то берется только первый узел коллекции. В то же время выражение //elements/element[@id='1'] возвращает коллекцию из одного единственного узла, вот ты и получаешь перового потомка этого узла с именем et. Если я правильно понял, что ты хочешь сделать, то это должно выглядеть как-то так
Код

        <xsl:for-each select="//elements/element[@id='1']/et">
            <xsl:value-of select="." />
        </xsl:for-each>



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


Бывалый
*


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

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



Спасибо вам большое.

Что бы можно было почитать такого по XSLT, чтобы разбираться в подобных вопросах? 
PM MAIL   Вверх
diadiavova
Дата 20.6.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(neokortex @  20.6.2011,  17:15 Найти цитируемый пост)
Что бы можно было почитать такого по XSLT, чтобы разбираться в подобных вопросах?

Тут, честно говоря, не подскажу. У меня это как-то само собой получилось и постепенно. Ну, еще помогает решение конкретных задач, в том числе, когда на форуме задают вопросы, то их решение тоже дает определенный опыт. Литературы много, но что лучше user posted image


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

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

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

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

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


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

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


 




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


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

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