powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / помогите написать простенький xsl
6 сообщений из 6, страница 1 из 1
помогите написать простенький xsl
    #35705531
karapetyan_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть простой хмл файл типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<dataroot>
	<person>
		<name>aa</name>
		<age> 33 </age>
	</person>
	<person>
		<name>bb</name>
		<age> 22 </age>
	</person>
	<person>
		<name>nn</name>
		<age> 33 </age>
	</person>
</dataroot>

надо получить другой хмл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<root>
	<row>
		<name>aa</name>
		<age> 33 </age>
	</row>
	<row>
		<name>bb</name>
		<age> 22 </age>
	</row>
	<row>
		<name>nn</name>
		<age> 33 </age>
	</row>
</root>

Я написал вот такой хсл :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
	<xsl:template match="/dataroot">
		<root>
			<xsl:for-each select="person" >
			<row>
				<name>
					<xsl:value-of select="name" />
				</name>
				<age>
					<xsl:value-of select="age" />
				</age>
			</row>
			</xsl:for-each>
		</root>
	</xsl:template>
</xsl:stylesheet>

содержимое узлов исходного (''/dataroot/person) и резултирующего ('/root/row') хмл-ов одинаково
Код: plaintext
1.
2.
<name>aa</name>
<age> 33 </age>

Вопрос такой: как можно написать такой хсл, чтобы все хмл-содержимое узла '/dataroot/person' копировалось бы в хмл-содержимое узла '/root/row', чтобы избежать "поштучного" создания каждого дочернего узла?

Заранее спасибо........
...
Рейтинг: 0 / 0
помогите написать простенький xsl
    #35705659
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
<row><xsl:copy-of select="*"/></row>
...
Рейтинг: 0 / 0
помогите написать простенький xsl
    #35705725
karapetyan_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo
Код: plaintext
<row><xsl:copy-of select="*"/></row>


согласен, если корневой элемент "голый" т.е. без аттрибутов то все работает, но если
вот такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<dataroot  xmlns:od="urn:schemas-microsoft-com:officedata" generated="2008-12-10T13:17:18">
	<person>
		<name>aa</name>
		<age> 33 </age>
	</person>
	<person>
		<name>bb</name>
		<age> 22 </age>
	</person>
	<person>
		<name>nn</name>
		<age> 33 </age>
	</person>
</dataroot>

то результат получается вот такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<root>
	<row>
		<name xmlns:od="urn:schemas-microsoft-com:officedata">aa</name>
		<age xmlns:od="urn:schemas-microsoft-com:officedata"> 33 </age>
	</row>
	<row>
		<name xmlns:od="urn:schemas-microsoft-com:officedata">bb</name>
		<age xmlns:od="urn:schemas-microsoft-com:officedata"> 22 </age>
	</row>
	<row>
		<name xmlns:od="urn:schemas-microsoft-com:officedata">nn</name>
		<age xmlns:od="urn:schemas-microsoft-com:officedata"> 33 </age>
	</row>
</root>

а хотелось бы "один к одному" без всяких пронстранств имен.............
...
Рейтинг: 0 / 0
помогите написать простенький xsl
    #35706040
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не припомню простого способа смены пространства имён узла, можно для этого написать шаблоны в общем виде.
...
Рейтинг: 0 / 0
помогите написать простенький xsl
    #35706212
karapetyan_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.NET овские классы работы с Xml -ом имеют такие свойства:

Node.InnerXml
Node.OuterXml

вот мне, в принципе, нужно взять InnerXml конкретного нода и поместить в результирующий файл.......
но аналога кроме <xsl:copy-of select="*"/> я не нахожу..........
а copy-of работает не "в лоб" а с "импровизациями".....:)................
...
Рейтинг: 0 / 0
помогите написать простенький xsl
    #35706788
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251"/>

  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="dataroot">
    <root>
      <xsl:apply-templates/>
    </root>
  </xsl:template>

  <xsl:template match="person">
    <row>
      <xsl:apply-templates/>
    </row>
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

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


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