powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath. Значение одного узла как имя другого узла.
5 сообщений из 5, страница 1 из 1
XPath. Значение одного узла как имя другого узла.
    #35644845
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дерево
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
/
  <users-ids>
    <user-id> 1 </user-id>
    ...
    <user-id>N</user-id>
  </users-ids>

  <users-names>
    <user-id>Name  1 </user-id>
    ...
    <user-id>Name N</user-id>
  </users-names>
Шаблон
Код: plaintext
1.
2.
3.
<xsl:template match="user-id">
      <xsl:value-of select="/user-names/вот_тут_текущий_user-id>
</xsl:template match="user-id">

Пример выдуманный, суть вопроса, надеюсь, понятна. Сам новичок в XPath ^^
...
Рейтинг: 0 / 0
XPath. Значение одного узла как имя другого узла.
    #35644929
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
они номерами строк связаны?
...
Рейтинг: 0 / 0
XPath. Значение одного узла как имя другого узла.
    #35645021
Hooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo, вот такой способ:
XML, из вашего XML вообще не понятно что делать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<root>
	<users-ids>
		<user-id> 1 </user-id>
		<user-id>N</user-id>
	</users-ids>
	<users-names>
		<user-id_1>Name  1 </user-id_1>
		<user-id_N>Name N</user-id_N>
	</users-names>
</root>

XSL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	<xsl:template match="user-id">
		<result>
		<xsl:variable name="user-id" select="concat ('user-id_', .)"/>			

		<xsl:for-each select="//users-names/child::*">
			<xsl:if test="name() = $user-id">
				<xsl:value-of select="."/>
			</xsl:if>
		</xsl:for-each>
		</result>
	</xsl:template>
...
Рейтинг: 0 / 0
XPath. Значение одного узла как имя другого узла.
    #35645631
Сирин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример, который я привёл выше, неясный :(. Так будет яснее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<root>
	<users-ids>
		<user-id> 10 </user-id>
		<user-id> 200 </user-id>
		<user-id> 100 </user-id>
		<user-id> 50 </user-id>
		<user-id> 60 </user-id>
	</users-ids>
	<users-names>
		< 10 >Какое-то имя</ 10 >
		< 200 >Ещё одно имя</ 10 >
		< 100 >Опять имя</ 100 >
		< 50 >Единственное и неповторимое имя</ 50 >
		< 60 >А тут ваще без имени</ 60 >
	</users-names>
</root>
Пример Hooter'а понятен. Можно ли обойтись без цикла? Можно ли сразу сформировать
путь, используя как часть пути значение дочернего (для контекстного) узла?

Код: plaintext
1.
2.
3.
4.
<xsl:template match="user-id">
	<result>
		<xsl:value-of select="/user-names/{.}"/> <--- что-то типа того, только у меня парсер ругается на "{}" внутри select 
	</result>
</xsl:template>
...
Рейтинг: 0 / 0
XPath. Значение одного узла как имя другого узла.
    #35646462
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй так
user-names/*[local-name()=current()]
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath. Значение одного узла как имя другого узла.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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