![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| NieL |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
Исходный XML-файл
Помогите составить XSLT-файл по которому из исходного XML-файла формируется новый XML-файл, содержащий в себе узлы updr и file у которых атрибуты from_ver и to_ver <> -1, т.е. должно получится: Результирующий XML-файл
Код использования уже написан:
Это сообщение отредактировал(а) NieL - 22.12.2010, 19:55 |
||||||
|
|||||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
У тебя исходный файл не валидный!
попробуй это
Это сообщение отредактировал(а) cat512 - 22.12.2010, 19:34 |
|||
|
||||
| NieL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
уже пробовал так, условие выполняется для всех узлов, мне же нужно проверять и отбирать только узлы updr и file, остальные игнорировать. |
|||
|
||||
| cat512 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Что мешает немного изменить скрипт?, например так
Только обрати внимание этим скриптом не будет соблюдаться порядок следования узлов в дереве. Если порядок важен, то то надо использовать ось child Это сообщение отредактировал(а) cat512 - 22.12.2010, 23:58 |
||||||
|
|||||||
| NieL |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
Я пытался сделать все в рамках одного select'a, чтобы не дублировать одни и те же условия для нужных мне веток, но так и не получилось, в любом случае спасибо за помощь. |
||||
|
|||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Вот тебе одним select-oм и в сущ. порядке
|
|||
|
||||
| NieL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
непонятны 2 момента:
1. для чего первый template, содержаций apply-templates? Без него вроде все работает. 2. в чем разница между name(.) и name(), возвращается одно и тоже. Это сообщение отредактировал(а) NieL - 23.12.2010, 13:18 |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
1
Да, всё будет работать и без него с такой структурой одноуровнего дерева. Но если у тебя в будующем структура файла изменится, и появятся вложенные узлы, то этот скрипт будет отрабатывать корректно, для всего дерева, а твой "модифицированный", только для узлов первого уровня 2 В данном случае, разница в читабельности, особенно, такой синтаксис актуален для громадных скриптов, где можно легко запутаться, поскольку в некоторых случаях "контекст текущего узла", с точки зрения пользователя, может существенно отличаться от контекста, с точки зрения xsl-процессора. |
|||
|
||||
| NieL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
thx за разъяснение.
Еще хочу прояснить для себя: 1. если мне к примеру нужно проверять и корневой узел (upd), он условно то же имеет атрибуты from_ver и from_to, то как будет выглядеть скрипт? 2. xsl:copy-of как я понимаю копирует узел со всем его содержимым, а что если скажем мне нужно скопировать ветку только с определенными атрибутами, для этого нужно юзать xsl:copy? Как указать список атрибутов которые должны попасть в результирующий список? P.S. Думаю если разберусь с этими вопросвми можно будет ставить точку по тему. |
|||
|
||||
| cat512 |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
1
Можно в рамках одного! Можешь просто добавить соответствующее условие выборки в шаблон соответствия корневому узлу, а можешь например написать единственный рекурсивный шаблон, что типа такого:
2 ну ты можешь сам (прямым тектом)формировать нужные аттрибуты, а можешьс помощью функций и xpat копировать существующие. Ну например: нужно тебе добавить в результирующее дерево новый узел:
тогда ты можешь прямым текстом в xsl скрипте добавить
либо скопировать нужные аттрибуты конструкцией
либо создать новый и скопировать значение старого конструкциями
3 Просто <xsl:copy> отличается от <xsl:copy-of> тем что эта функция одноранговая, т.е. она копирует только контекстный узел, без вложенных узлов. Это сообщение отредактировал(а) cat512 - 23.12.2010, 20:20 |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |