XSLT. Как осуществить выбор по нескольким критериям
От: sbobrikov  
Дата: 13.04.07 15:18
Оценка:
Пример есть xml:

<root>
<book name="Book1">
<subject>Наука</subject>
<subject>Физика</subject>
</book>
<book name="Book2">
<subject>Фантастика</subject>
<subject>Физика</subject>
</book>
<book name="Book3">
<subject>Наука</subject>
<subject>Химия</subject>
</book>
</root>

необходимо выбрать все books с заданным НАБОРОМ характеристик (subject).

Как для одной характеристики понятно:

<xsl:param name="psubject">Наука</xsl:param>
...
root/book[subject = $psubject]


А как выбрать все книги у которых есть характеристики 'Физика' или 'Фантастика', т.е. Book1 и Book2
Re: XSLT. Как осуществить выбор по нескольким критериям
От: Lloyd Россия  
Дата: 13.04.07 16:13
Оценка:
Здравствуйте, sbobrikov, Вы писали:

S>А как выбрать все книги у которых есть характеристики 'Физика' или 'Фантастика', т.е. Book1 и Book2


root/book[(subject = $psubject) or (subject = $psubject2)]
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: XSLT. Как осуществить выбор по нескольким критериям
От: sbobrikov  
Дата: 13.04.07 16:19
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, sbobrikov, Вы писали:


S>>А как выбрать все книги у которых есть характеристики 'Физика' или 'Фантастика', т.е. Book1 и Book2


L>
L>root/book[(subject = $psubject) or (subject = $psubject2)]
L>


Это я понимаю.
Я не уточнил: Количество критериев различное. Может 2, а может 5. Заранее не известно.
И они должны задаваться параметрами.
Re[3]: XSLT. Как осуществить выбор по нескольким критериям
От: Lloyd Россия  
Дата: 13.04.07 16:22
Оценка:
Здравствуйте, sbobrikov, Вы писали:

S>Это я понимаю.

S>Я не уточнил: Количество критериев различное. Может 2, а может 5. Заранее не известно.
S>И они должны задаваться параметрами.

И как ты собрался передавать параметрами неизвестное кол-во значений?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: XSLT. Как осуществить выбор по нескольким критериям
От: sbobrikov  
Дата: 13.04.07 16:51
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, sbobrikov, Вы писали:


S>>Это я понимаю.

S>>Я не уточнил: Количество критериев различное. Может 2, а может 5. Заранее не известно.
S>>И они должны задаваться параметрами.

L>И как ты собрался передавать параметрами неизвестное кол-во значений?


В этом и вопрос.

Я уже понял что для сравнения можно задать набор узлов
например выражение

root/book[subject = /root/book[2]/subject]

выбирает все книги в которых subject совпадает хотябы с одним из book[2]. Т.е. Book1,Book2 и Book4

Осталось как то передать набор узлов через параметр.


Другой вариант, могу для каждой book строить двоичную маску
для ее subject (количество их видов у меня ограничено порядка 20).

Но не понятно как ее сравниывать, т.к. and не дает ожидаемого результата
Re[5]: XSLT. Как осуществить выбор по нескольким критериям
От: bnk СССР http://unmanagedvisio.com/
Дата: 14.04.07 13:11
Оценка:
Здравствуйте, sbobrikov, Вы писали:

Вариант "грубой силы": пропатчить XSL в рантайме.
Т.е. вы загружаете XSL (как DOM document например), "дописываете" в него все что нужно в рантайме,
и для преобразования используете уже этот "пропатченный" XSL.
Re[5]: XSLT. Как осуществить выбор по нескольким критериям
От: Lloyd Россия  
Дата: 14.04.07 15:30
Оценка:
Здравствуйте, sbobrikov, Вы писали:

S>Я уже понял что для сравнения можно задать набор узлов

S>например выражение

В принцыпе, те xslt-процессоры, которые я знаю, все допускают передачу в кач-ве параметра XmlNode-а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: XSLT. Как осуществить выбор по нескольким критериям
От: sbobrikov  
Дата: 18.04.07 08:48
Оценка:
Здравствуйте, bnk, Lloyd.

Спасибо за помощь.

Вы писали:

bnk>Вариант "грубой силы": пропатчить XSL в рантайме.

bnk>Т.е. вы загружаете XSL (как DOM document например), "дописываете" в него все что нужно в рантайме,
bnk>и для преобразования используете уже этот "пропатченный" XSL.

L>В принцыпе, те xslt-процессоры, которые я знаю, все допускают передачу в кач-ве параметра XmlNode-а.



Посмотрел описание xslt-процессора вроде поддерживает передачу куска дерева, но еще не пробовал.

Хочу сначала отладить на примере, и опять проблемка:

Если описываю параметр непосредственно в xslt как дерево:
<xsl:param name="psubject">
<root>
<subject>Наука</subject>
<subject>Физика</subject>
</root>
</xsl:param>

то на выражении

root/book[subject = $psubject/root/subject]

получаю ошибку. $psubject, не воспринимается парсером как набор узлов

Если сформировать отдельный xml файл, пусть filter.xml :

<root>
<subject>Наука</subject>
<subject>Физика</subject>
</root>

и определить параметр как:

<xsl:param name="psubject1" select="document('filter.xml')" ></xsl:param>
и обратиться так же

root/book[subject = $psubject1/root/subject]

то все работает, т.е. $psubject1 воспринимается как набор узлов.


Как правильно внутри xslt задать параметр определяющий набор узлов?
Re[7]: XSLT. Как осуществить выбор по нескольким критериям
От: sbobrikov  
Дата: 20.04.07 09:37
Оценка:
Так может кто-нибудь все таки знает как правильно внутри xslt задать параметр определяющий набор узлов?

см. предыдущий пост...

Спасибо
Re[8]: XSLT. Как осуществить выбор по нескольким критериям
От: Lloyd Россия  
Дата: 20.04.07 10:11
Оценка:
Здравствуйте, sbobrikov, Вы писали:

S>Так может кто-нибудь все таки знает как правильно внутри xslt задать параметр определяющий набор узлов?


S>см. предыдущий пост...


S>Спасибо


node-set
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: XSLT. Как осуществить выбор по нескольким критериям
От: sbobrikov  
Дата: 20.04.07 17:24
Оценка:
Все заработало!

Огромное спасибо.
Re[10]: XSLT. Как осуществить выбор по нескольким критериям
От: Lloyd Россия  
Дата: 20.04.07 17:27
Оценка: :)
Здравствуйте, sbobrikov, Вы писали:

S>Огромное спасибо.


Ну прям как маленький — для спасибо есть кнопка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.