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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Extended function, как это работает 
:(
    Опции темы
StepS
Дата 6.3.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



Всем привет. Есть такая задача :
есть condition.xml вида:
Код

<root>
   <condition>id = '2'</condition>
   .........
   <condition> ./@type = ../@supertype<condition>
</root>


есть data.xml вида :
Код

<root>
  <data @supertype = "1">
     <data1 @type = "2"/>
  </data>
.........
</root>


мне нужно написать xslt в котором я смогу в выражение <xsl:if test = "????">....</xsl:if> вместо заков вопроса подставить condition из
condition.xml причем так чтоб это выражение воспринялось как условие.

иными словами как сделать из строки выражение ? smile
я подобных функций не нашел, Поэтому посетила злая мысль написать extended function, подскажите плз. как они пишуться и используются, можно ссылочку на доку.

З.Ы. я пишу на .NET c# поэтому функции на java не подойдут
PM MAIL ICQ   Вверх
3,14
Дата 9.3.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Не уверен что такое вообще можно сделать, обработку такого уровня сложности всё же обычно перекладывают на язык программирования, в твоём случае C#.
Может скажешь исходную задачу? Похоже что ты просто перемудрил со структурой проекта.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
StepS
Дата 9.3.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



Вообщем ответ такой:
condition.xml переделываем след. образом:
Код

  <root>
    <Style ID = "ID_Department_1">
        <condition>
            <element>ID_Department</element>
            <cond>. = 1</cond>
        </condition>
    </Style>
  </root>


пишем на C# функцию
Код

        public string GetStyleIDByCondition(XPathNodeIterator oCurrIterator, XPathNodeIterator oListCondition) {
            while(oListCondition.MoveNext()) {
                string cValue = oListCondition.Current.Select("condition/cond").Current.Value;
                if(EvaluateBoolean(oCurrIterator, cValue)) {
                    return oListCondition.Current.Select("../@ID").ToString();
                }
            }
            return "NormalStyle";
        }

        public bool EvaluateBoolean(XPathNodeIterator oCurrIterator, string cCondition) {
            return (bool)oCurrIterator.Current.Evaluate(cCondition);
        }



вызов из xsl делаем так :
step:GetStyleIDByCondition(., document('Styles.xml')//Style[condition/element = '{$nodename}'])
должно все работать !
smile
Добавлено @ 12:53
исходная задача: Сделать репорт с гибким изменением форматирования
Я придумал след. выход:
Есть xml с данными, есть xml с форматированием, есть xslt для обработки данных. Сливая воеднино данные и форматирование получаем на выходе отчет. Структура отчета не меняется, меняется только фоматирование. Поэтому xslt служит для отработки структуры отчета + накладываение форматирования, которое задается в отдельном файле.
может в дебри полез smile подскажите лучший способ решения данной задачи
PM MAIL ICQ   Вверх
3,14
Дата 9.3.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Первое что приходит на ум, то что для каждого варианта форматирования можно завести свой XSLT шаблон, а куски не связанные с форматированием вынести template-ами в отдельный шаблон и include-ить его из тех шаблонов, что отвечают за форматирование.

Это сообщение отредактировал(а) 3,14 - 9.3.2006, 13:24


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
StepS
Дата 9.3.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



Просто форматирование пересекается со структурой. Например:
берем тег из xml с данными, смотрим если этот элемент попадает под форматирование (удовлетворяет условию) то устанавливаем ему стиль отображения, если не попадает - просто структурируем его на свое место! Нужно чтоб можно было у какждой ячейки таблицы менять форматирование, вне зависимости от других ячеек.
Т.е. есть 3 ячейки, расположенные в опеределнном порядке, расположение задается xslt шаблоном. Сейчас мне нужно подсветить среднюю ячейку синим жирным, завтра мне нужно все три ячейки подсветить.
Усложняем задачу: подсветить ячейки у которых значение больше 66 или меньше 0. получается xslt шаблон нужно постоянно переписывать. Что не годиться, тем более количество ячеек постоянно меняется т.е. динамичное

Это сообщение отредактировал(а) StepS - 9.3.2006, 13:48
PM MAIL ICQ   Вверх
3,14
Дата 9.3.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Тогда тебе нужны шаблоны к-ым на вход подаётся ячейка, а те уже знают как её обрабатывать. Если у тебя каждый день будет меняться шаблон, то тебе всё равно придётся что-то менять ручками, XSLT, XML или код. А вот если можно организовать фиксированный набор шаблонов для задачи, тогда её можно упростить. Например, сделать это видимо возможно, введением дополнительной информации в генерируемый XML файл, но чтоб сказать что то более конкретное, нужно чтоб задача была сформулированна более конкретно.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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