![]() |
|
Модераторы: diadiavova |
![]()
|
|
| Luc1fer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.11.2004 Репутация: нет Всего: нет |
Народ, каким образом можно написать XSLT шаблон,
чтобы сымулировать команду include. Т. е.: Есть xml файл <?xml version="1.0" encoding="windows-1251"?> <Root xmlns:xpl="http://www.itslab.niks.by"> <c>Привет</c> <d> <xpl:include select="../../c" </d> </Root> На этот файл нужно наложить такой шаблон, чтобы выходной файл выглядел след образом: <Root xmlns:xpl="http://www.itslab.niks.by"> <c>Привет</c> <d> <c>Привет</c> </d> </Root> Моя идея: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="include"> <xsl:value-of select="@select"/> - только как сделать, чтобы в value-of попадало именно значение @select????????? </xsl:template> </xsl:stylesheet> |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 10 Всего: 24 |
Не подойдёт? -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 2 Всего: 73 |
Похоже нет. У меня первая мысль тоже была - импорт шаблона. А человеку, видимо, хочется чтобы можно было вставить узел того же дерева, но из параллельной ветви. Правда, зачем это нужно, я так и не понял. -------------------- Теперь при чем :P |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 10 Всего: 24 |
Тады xsl:copy юзать нуно -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 2 Всего: 73 |
-------------------- Теперь при чем :P |
|||
|
||||
| 3,14 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 10 Всего: 24 |
Возьмём XML:
Чтоб скопировать из него содержимое ноды с ключом 2 применим XSL:
И как результат получим:
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||||
|
|||||||
| Luc1fer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.11.2004 Репутация: нет Всего: нет |
Енто все ясно.
Мне нужно, чтоб шаблон распознал мою команду, например <xpl:include select="../../c"/> взял атрибут select и вставил на место этой команды то, что он выбрал в select |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 10 Всего: 24 |
../../c - это файл или node текущего документа?
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Luc1fer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.11.2004 Репутация: нет Всего: нет |
вообще-то узел, но в принципе
должно выбирать из файла список узлов, аля dociment("1.txt")/Root |
|||
|
||||
| Ignat |
|
||||||||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 2 Всего: 73 |
Luc1fer, объясните, пожалуйста, понятнее.
Если
если же
Если предложенные варианты не подходят, то расскажите чего именно нужно добиться. -------------------- Теперь при чем :P |
||||||||
|
|||||||||
| Luc1fer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.11.2004 Репутация: нет Всего: нет |
Попробую)
Итак, есть xml документ, в котором встречается тег - <xpl:include> <Select>/Root/1</Select> <File>1.xml</File> <Directory>c:/1/</Directory> </xpl:include> После обработки файла с этой командой вместо нее должно стоять то, что выберет XPath из c:/1/1.xml Мой вариант для простого включения файла:
Изврат еще и в том, что в подключаемом файле может также находиться <xpl:include>)) В этом варианте весь вопрос в том, как к document(concat(Directory/text(),"/",File/text())) еще приклеить значение select. Так нельзя - concat(document(concat(Directory/text(),"/", File/text())), select/text()) Так проблема с незнаючем <xsl:apply-templates select="concat( 'document(' ,Directory/text(), '/' , File/text(),')' )"/> |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 10 Всего: 24 |
Всё равно не понял чем этот вариант отличается от обычного включения файла,
запости какой-нибудб пример исходных данных и того что должно получится -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Luc1fer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.11.2004 Репутация: нет Всего: нет |
Хорошо пример Файл 1.xml <?xml version="1.0" encoding="windows-1251"?> <?xml-stylesheet type="text/xsl" href="test.xsl"?> <Root xmlns:xpl="http://www.itslab.niks.by"> <xpl:include> <Directory>c/myDir</Directory> <File>2.xml</File> <Select>/Root/car</Select> </xpl:include> </Root> Файл 2.xml <?xml version="1.0" encoding="windows-1251"?> <Root xmlns:xpl="http://www.itslab.niks.by"> <car> <xpl:include> <Directory>c/myDir</Directory> <File>3.xml</File> <Select>/Root/car</Select> </xpl:include> </car> </Root> Файл 3.xml <?xml version="1.0" encoding="windows-1251"?> <Root xmlns:xpl="http://www.itslab.niks.by"> <car> BMW <Color>Blue</Color> </car> </Root> После обработки 1.xml получим: <Root xmlns:xpl="http://www.itslab.niks.by"> <car> <car> BMW <Color>Blue</Color> </car> </car> </Root> Вот так |
|||
|
||||
| 3,14 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 10 Всего: 24 |
Однако попотеть пришлось, вот пример там немного менять нужно:
test.xml:
test2.xml:
test.xsl:
И результат:
А зачем такое нуно если не секрет? -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||||||
|
|||||||||
| Luc1fer |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.11.2004 Репутация: нет Всего: нет |
Очень просто). Я пишу на Java, а в XSLT - полный дуб(вековой).
Работаем над проектом, аля Semantic-web. Я занимаюсь написанием компилятора нового веб-языка)), если можно так сказать. Так вот в этом языке есть такая команда include - которая позволяет вставить в текущее место документа некоторый набор узлов. Меня попросили сделать тоже самое без Java или JavaScript, средствами XSL. Я дошел до
Но все портит эта строка -
Так я могу вставить файл. А как к этому еще присобачить, что из него выбрать??? Наткнулся, что
Не србатывает, и мысль ушла. |
||||||
|
|||||||
![]()
|
| Правила форума "XML/XSLT" | |
|
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | XML, XSL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |