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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XSLT. Проблемы с 'xsl:sequence' 
:(
    Опции темы
Compositum
Дата 23.2.2012, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Доброго времени суток.
Изучаю XSLT. Написал такой xml-файл:
Код

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="xpath2.xsl"?>
<doc>
    <items>
        <node>Den</node>
        <node>Bob</node>
        <node>Mike</node>
    </items>
</doc>

Для этого файла создал файл xpath2.xsl:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"    
    xmlns:xs= "http://www.w3.org/2001/XMLSchema"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="UTF-8" method="text"/>    
    <xsl:template match="/">
        <xsl:variable name="myVar" as="xs:string*">    
            <xsl:sequence select="doc/items/node"/>        
            <xsl:sequence select="('1', '2', '3')"/>
        </xsl:variable>
        <xsl:text>Node values:&#xA;</xsl:text>        
        <xsl:value-of select="$myVar" separator="&#xA;"/>
    </xsl:template>
</xsl:stylesheet>

Если в браузере (любой, кроме Google Chrome) открыть xml-файл, то текст "Node values:" я вижу, но перечисление отсутствует. 

Почему?

В Google Chrome почему-то xsl не работает (видимо не реализована поддержка).

Если в командной строке выполнить это (воспользовавшись Saxonica):
Код

"C:\Program Files\Saxonica\SaxonHE9.4N\bin\Transform.exe" 
-s:"C:\Users\user\Documents\Learning\xslt\xpath\test.xml" 
-xsl:"C:\Users\user\Documents\Learning\xslt\xpath\xpath2.xsl" 
-o:"C:\Users\user\Documents\Learning\xslt\xpath\result.txt"

То в результате получаю текстовый файл с нужным содержимым:
Код

Node values:

Den
Bob
Mike
1
2
3

Т.е. браузеры весьма слабо работают с XSLT?

Это сообщение отредактировал(а) Compositum - 23.2.2012, 18:01
PM   Вверх
krypt3r
Дата 24.2.2012, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
В Google Chrome почему-то xsl не работает (видимо не реализована поддержка).

Работает. Залейте XML и XSL на веб-сервер.
Код

<?xml-stylesheet type="text/xsl" href="http://site.ru/xpath2.xsl"?>

Либо запускайте хром с опцией --allow-file-access-from-files. Подключение локальных стилевых таблиц запрещено браузером по причинам безопасности.
Цитата
Т.е. браузеры весьма слабо работают с XSLT?

Хорошо работают, но не с 2.0.
PM MAIL   Вверх
Compositum
Дата 24.2.2012, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Спасибо за ответ! 

Запустил "хром" с опцией --allow-file-access-from-files. В результате первая строка текста в результате появилась, но следующий ниже перечень так и не появился.

Жаль, что не с XSLT 2.0 - там много интересного. Можно ли приведённый мною выше xsl-код переделать под XSLT 1.0 так, чтобы я всё таки получал перечень значений? Буду признателен за пример.

Я пробовал делать так:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"    
    xmlns:xs= "http://www.w3.org/2001/XMLSchema"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="UTF-8" method="text"/>    
    <xsl:template match="/">
        <xsl:variable name="myVar" select="/doc/items/*"/>            
        <xsl:text>Node values:&#xA;</xsl:text>            
        <xsl:value-of select="$myVar" separator="&#xA;"/>        
    </xsl:template>
</xsl:stylesheet>

Однако результат получаю такой:
Код

Node values:
Den

Т.е. после первой строки нет пустой строки (как задумывалось), а так же из всех имеющихся элементов получен только первый.

Это сообщение отредактировал(а) Compositum - 24.2.2012, 10:35
PM   Вверх
Compositum
Дата 24.2.2012, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



заменил на это:
Код

<xsl:variable name="myVar" select="/doc/items"/>

заработало, но не совсем так, как ожидалось:
Код

Node values:

        Den
        Bob
        Mike

Почему не сработала звёздочка? Ведь она означает выбор всех элементов... 
Почему перед каждым именем большой отступ (я же его не задавал)?

Это сообщение отредактировал(а) Compositum - 24.2.2012, 10:38
PM   Вверх
magelan
Дата 27.2.2012, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



Код

<xsl:variable name="myVar">
     <xsl: for-each select="/doc/items">
         <xsl:value-of select="node/text()" />
         <xsl:text>
</xsl:text>
     </xsl:for-each>
     <xsl: for-each select="/doc/items">
         <xsl:value-of select="position()" />
         <xsl:text>
</xsl:text>
     </xsl:for-each>
</xsl:variable>

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

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

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

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

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


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

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


 




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


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

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