Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод атрибута родителя несколько раз по количеству наследников / 12 сообщений из 12, страница 1 из 1
12.10.2010, 13:07
    #36894518
blackout
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
Есть xml:
Код: plaintext
1.
2.
3.
<root attr_parent="p_value">
	<node attr="attr_value_1"/>
	<node attr="attr_value_2"/>
</root>
Сильно упрощенная задача: необходимо написать XPath, который вернет значение attr_parent столько раз, сколько чайлдов у нода root.
...
Рейтинг: 0 / 0
12.10.2010, 13:33
    #36894584
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
blackout,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<xsl:apply-templates select="/root/node"/>
	</xsl:template>
	<xsl:template match="node">
		<xsl:value-of select="../@attr_parent"/>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
12.10.2010, 13:51
    #36894642
blackout
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
это же xsl а надо просто xpath.
...
Рейтинг: 0 / 0
12.10.2010, 14:06
    #36894700
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
blackout,

хм... множество узлов в котором один элемент(атрибут) будет несколько раз? Интересно, возможно ли это? Или строку из значений атрибута?
...
Рейтинг: 0 / 0
12.10.2010, 15:48
    #36895059
blackout
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
refreg , первый вариант.
Т.е., к примеру, xpath '/root/node/@attr' вернет
Код: plaintext
1.
attr_value_1
attr_value_2
и нужно написать такой xpath, который для данного конкретного примера вернет
Код: plaintext
1.
p_value
p_value
.
...
Рейтинг: 0 / 0
12.10.2010, 15:50
    #36895063
Andry Trushin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
blackout,

xPath не умеет крутить циклы, он умеет отдавать коллекции нодов, атрибут не может быть рассмотрен как коллекция.

Чем не устраивает решение предложенное refreg?

Задачку более подробно опишите.
...
Рейтинг: 0 / 0
12.10.2010, 16:10
    #36895146
blackout
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
Есть механизм, который формирует таблицу по xpath'ам, и только по ним(XSL не прикрутить, механизм уже реализован и переделывать/доделывать его для этой задачи не стОит). Т.е., если есть xml
Код: plaintext
1.
2.
3.
<root attr_parent="parent_attr">
	<node attr0="attr0_value_1" attr1="attr1_value_1"/>
	<node attr0="attr0_value_2" attr1="attr1_value_2"/>
</root>
и этому механизму мы дадим эту xml и набор xpath'ов
Код: plaintext
1.
/root/node/@attr0
/root/node/@attr1
то он сформирует таблицу вида
Код: plaintext
1.
2.
3.
4.
|--------------|--------------|
|attr0_value_1 | attr1_value_1|
|--------------|--------------|
|attr0_value_2 | attr1_value_2|
|-----------------------------|
и необходимо, чтобы в эту таблицу был добавлен столбец со значением из родительского нода, т. е. таблица приобрела вид
Код: plaintext
1.
2.
3.
4.
|-------------------------------------------|
|parent_attr | attr0_value_1 | attr1_value_1|
|------------|---------------|--------------|
|parent_attr | attr0_value_2 | attr1_value_2|
|-------------------------------------------|
вот для этого и ищется такой xpath, который вернул бы атрибут из парента столько раз, сколько чайлдов у него есть.
...
Рейтинг: 0 / 0
12.10.2010, 16:23
    #36895214
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
сформируй из своего xml такой промежуточный файл:
Код: plaintext
1.
2.
3.
4.
<root attr_parent="parent_attr">
    <node attr0="parent_attr" attr1="parent_attr"/>
    <node attr0="attr0_value_1" attr1="attr1_value_1"/>
    <node attr0="attr0_value_2" attr1="attr1_value_2"/>
</root>
и скорми своему механизму...
...
Рейтинг: 0 / 0
12.10.2010, 16:26
    #36895222
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
вернее такой:
Код: plaintext
1.
2.
3.
<root attr_parent="parent_attr">
    <node attrP="parent_attr" attr0="attr0_value_1" attr1="attr1_value_1"/>
    <node attrP"parent_attr" attr0="attr0_value_2" attr1="attr1_value_2"/>
</root>
...
Рейтинг: 0 / 0
12.10.2010, 16:55
    #36895335
blackout
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
ну перелопачивание xml было как самый последний запасной вариант, хотел без него. Но, поскольку простым xpath'ом не получится, видимо придется делать так=(
...
Рейтинг: 0 / 0
12.10.2010, 21:22
    #36895847
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
XPath 2.0 оказывается эту задачу решить можно. Там есть понятие "последовательность"
Код: plaintext
select="for $x in /root/node return $x/../@attr_parent"
чтобы было понятно, этот xpath разворачивается в последовательность:
Код: plaintext
select="(/root/node[1]/../@attr_parent, /root/node[2]/../@attr_parent)"
...
Рейтинг: 0 / 0
13.10.2010, 10:56
    #36896417
blackout
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод атрибута родителя несколько раз по количеству наследников
Спасибо! То, что надо.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод атрибута родителя несколько раз по количеству наследников / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]