powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Преобразовать все узлы в одну строку
5 сообщений из 5, страница 1 из 1
Преобразовать все узлы в одну строку
    #36509385
XSLT?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день!
на данный момент я ноль во всех этих xlt. а на новой работе вот столкнулся с ними.

напишите, пожалуйста, преобразование для xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  
<pack>
    <org OrgName ="Org1">
      <docs DocDate ="2010-01-31">
        <header DocName ="doc1">
          <rec art ="100" price ="10.5"/>
          <rec art ="200" price ="50"/>
          <rec art ="300" price ="13"/>
        </header>
        <header name ="doc2">
          <rec art ="200" price ="16"/>
          <rec art ="400" price ="25"/>
          <rec art ="600" price ="142"/>
        </header>
      </docs>
    </org>
  </pack>

чтобы получился
Код: plaintext
1.
2.
3.
4.
<docs>
  <rec OrgName ="Org1" DocDate ="2010-01-31" art ="100" price ="10.5"/>
  ........
</docs>

т.е. в каждый элемент <rec> в добавок к собственным атрибутам скопировать атрибуты родительских элементов
...
Рейтинг: 0 / 0
Преобразовать все узлы в одну строку
    #36509526
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XSLT?,

У второй ветки тега <header>, атрибут name.
Если я не ошибаюсь то он должен быть DocName.

Если так, вот решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 <xsl:template match="pack">
	<docs>
		<xsl:for-each select="org/docs/header/rec">
			<rec>
				<xsl:attribute name="OrgName">
					<xsl:value-of select="ancestor::org/@OrgName"/>
				</xsl:attribute>
				<xsl:attribute name="DocDate">
					<xsl:value-of select="ancestor::docs/@DocDate"/>
				</xsl:attribute>
				<xsl:attribute name="DocName">
					<xsl:value-of select="ancestor::header/@DocName"/>
				</xsl:attribute>				
				<xsl:attribute name="art">
					<xsl:value-of select="@art"/>
				</xsl:attribute>
				<xsl:attribute name="price">
					<xsl:value-of select="@price"/>
				</xsl:attribute>
			</rec>
		</xsl:for-each>
	</docs>				
 </xsl:template>
 
...
Рейтинг: 0 / 0
Преобразовать все узлы в одну строку
    #36509575
XSLT?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_DeminXSLT?,

У второй ветки тега <header>, атрибут name.
Если я не ошибаюсь то он должен быть DocName.

Если так, вот решение:
Код: plaintext
1.
2.
3.
4.
5.
 <xsl:template match="pack">
	<docs>
		<xsl:for-each select="org/docs/header/rec">
			<rec>

 


Пасибо. То, что надо. Дополнительный вопрос: А атрибуты можно скопировать так же "фор-ичем". Просто их больше 50 в элементе <rec>.
...
Рейтинг: 0 / 0
Преобразовать все узлы в одну строку
    #36509607
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
				<xsl:for-each select="@*">
					<xsl:attribute name="{name()}">
						<xsl:value-of select="."/>
					</xsl:attribute>					
				</xsl:for-each>
...
Рейтинг: 0 / 0
Преобразовать все узлы в одну строку
    #36509619
XSLT?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin
Код: plaintext
1.
2.
3.
4.
5.
				<xsl:for-each select="@*">
					<xsl:attribute name="{name()}">
						<xsl:value-of select="."/>
					</xsl:attribute>					
				</xsl:for-each>


Кланяюсь тебе, о Человек!!! Пасиб огромное!!!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Преобразовать все узлы в одну строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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