powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод атрибута родителя несколько раз по количеству наследников
12 сообщений из 12, страница 1 из 1
вывод атрибута родителя несколько раз по количеству наследников
    #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
вывод атрибута родителя несколько раз по количеству наследников
    #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
вывод атрибута родителя несколько раз по количеству наследников
    #36894642
blackout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это же xsl а надо просто xpath.
...
Рейтинг: 0 / 0
вывод атрибута родителя несколько раз по количеству наследников
    #36894700
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blackout,

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

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

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

Задачку более подробно опишите.
...
Рейтинг: 0 / 0
вывод атрибута родителя несколько раз по количеству наследников
    #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
вывод атрибута родителя несколько раз по количеству наследников
    #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
вывод атрибута родителя несколько раз по количеству наследников
    #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
вывод атрибута родителя несколько раз по количеству наследников
    #36895335
blackout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну перелопачивание xml было как самый последний запасной вариант, хотел без него. Но, поскольку простым xpath'ом не получится, видимо придется делать так=(
...
Рейтинг: 0 / 0
вывод атрибута родителя несколько раз по количеству наследников
    #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
вывод атрибута родителя несколько раз по количеству наследников
    #36896417
blackout
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! То, что надо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод атрибута родителя несколько раз по количеству наследников
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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