powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / собрать из двух XML один
2 сообщений из 2, страница 1 из 1
собрать из двух XML один
    #35504001
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, есть такие документы
основной
Код: plaintext
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8" ?>
<root>
	<item no="0" name="0name"/>
	<item no="1" name="1name"/>
	<item no="2" name="2name"/>
</root>
и spr.xml
Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8" ?>
<spr>
	<s id="0" name="first"/>
	<s id="1" name="second"/>
</spr>
Нужно получить
Код: plaintext
1.
2.
3.
<?xml version='1.0' encoding='UTF-8' ?>
<id_spr no="0" name="0name" sprname="first"/>
<id_spr no="1" name="1name" sprname="second"/>
<id_spr no="2" name="2name" sprname=""/>
т.е. по root/item/@no первого документа получить spr/s/@name

Пытаюсь делать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
	<xsl:variable name="sprs" select="document('spr.xml')"/>
	<xsl:template match="/">
		<xsl:for-each select="root/item">
			<id_spr>
				<xsl:variable name="spr" select="$sprs/spr/s[@id=@no]"/>
                                <!-- spr - почему-то пустая! -->
				<xsl:attribute name="no">
					<xsl:value-of select="@no"/>
				</xsl:attribute>
				<xsl:attribute name="name">
					<xsl:value-of select="@name"/>
				</xsl:attribute>
				<xsl:attribute name="sprname">
					<xsl:value-of select="$spr/@name"/>
				</xsl:attribute>
			</id_spr>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
Но в строчке <xsl:variable name="spr" select="$sprs/spr/s[@id=@no]"/> ошибка - ничего в переменную не выбирается, если вместо @no указать прямо номер (например:
<xsl:variable name="spr" select="$sprs/spr/s[@id='1']"/> )
то выборка работает.
...
Рейтинг: 0 / 0
собрать из двух XML один
    #35504099
_Cepera_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нагуглил, надо было заменить @no на current()/@no
Код: plaintext
<xsl:variable name="spr" select="$sprs/spr/s[@id=current()/@no]"/>
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / собрать из двух XML один
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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