Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Шаблон в шаблоне / 9 сообщений из 9, страница 1 из 1
09.06.2008, 21:31
    #35365699
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
Привет всем!
Есть такая проблема...
есть xml вот такого вида:
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
 .................               
                <LIN>
			<LIN01> 1 </LIN01>
			<LIN03>
				<LIN0301> 760557801443 </LIN0301>
			</LIN03>
		</LIN>
		<PIA>
			<PIA01> 1 </PIA01>
			<PIA02>
				<PIA0201> 144537 </PIA0201>
			</PIA02>
		</PIA>
		<QTY>
			<QTY01>
				<QTY0102> 100 </QTY0102>
			</QTY01>
		</QTY>
		<LIN>
			<LIN01> 2 </LIN01>
			<LIN03>
				<LIN0301> 760557801436 </LIN0301>
			</LIN03>
		</LIN>
		<PIA>
			<PIA01> 1 </PIA01>
			<PIA02>
				<PIA0201> 149110 </PIA0201>
			</PIA02>
		</PIA>
		<QTY>
			<QTY01>
				<QTY0102> 50 </QTY0102>
			</QTY01>
		</QTY>
...........
Пишу для нее xsl:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsl:apply-templates select="LIN"/>
<xsl:template match="LIN">
		<POSITIONNUMBER>
			<xsl:value-of select="LIN01"/>
		</POSITIONNUMBER>
		<PRODUCT>
			<xsl:value-of select="LIN03/LIN0301"/>
		</PRODUCT>
</xsl:template>
<xsl:apply-templates select="../PIA/PIA02"/>
<xsl:template match="PIA02">
	<PRODUCTIDBUYER><xsl:value-of select="PIA0201"/></PRODUCTIDBUYER>

</xsl:template>
И у меня получается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<POSITIONNUMBER> 1 </POSITIONNUMBER>
<PRODUCT> 760557801443 </PRODUCT>
<PRODUCTIDBUYER> 144537 </PRODUCTIDBUYER>
<PRODUCTIDBUYER> 149110 </PRODUCTIDBUYER>
.............
<POSITIONNUMBER> 2 </POSITIONNUMBER>
<PRODUCT> 760557801436 </PRODUCT>
<PRODUCTIDBUYER> 144537 </PRODUCTIDBUYER>
<PRODUCTIDBUYER> 149110 </PRODUCTIDBUYER>
.............

А мне нужно что б было:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<POSITIONNUMBER> 1 </POSITIONNUMBER>
<PRODUCT> 760557801443 </PRODUCT>
<PRODUCTIDBUYER> 144537 </PRODUCTIDBUYER>
............
<POSITIONNUMBER> 2 </POSITIONNUMBER>
<PRODUCT> 760557801436 </PRODUCT>
<PRODUCTIDBUYER> 149110 </PRODUCTIDBUYER>
..............
Спасибо!
...
Рейтинг: 0 / 0
09.06.2008, 21:35
    #35365701
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
Сори....
xsl выглядит вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsl:apply-templates select="LIN"/>
.............
<xsl:template match="LIN">
		<POSITIONNUMBER>
			<xsl:value-of select="LIN01"/>
		</POSITIONNUMBER>
		<PRODUCT>
			<xsl:value-of select="LIN03/LIN0301"/>
		</PRODUCT>
<xsl:apply-templates select="../PIA/PIA02"/>
</xsl:template>
<xsl:template match="PIA02">
	<PRODUCTIDBUYER><xsl:value-of select="PIA0201"/></PRODUCTIDBUYER>
</xsl:template>
...
Рейтинг: 0 / 0
09.06.2008, 21:36
    #35365704
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
По какому принципу связывать узлы <LIN> и <PIA>?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
09.06.2008, 21:43
    #35365712
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
_Vasilisk_По какому принципу связывать узлы <LIN> и <PIA>?

С уважением, Vasilisk
последовательно...
как на примере:
Код: plaintext
1.
2.
3.
4.
...
<LIN></LIN>
<PIA></PIA>
<QTY></QTY>
.....
...
Рейтинг: 0 / 0
09.06.2008, 22:24
    #35365768
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
Xsl _Vasilisk_По какому принципу связывать узлы <LIN> и <PIA>?
последовательно...
Это безобразие. Неужели нельзя вставлять тройки узлов <LIN>, <PIA>, <QTY> в один общий узел? Т.е. чтобы было так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
<ITEM>
  <LIN></LIN>
  <PIA></PIA>
  <QTY></QTY>
</ITEM
<ITEM>
  <LIN></LIN>
  <PIA></PIA>
  <QTY></QTY>
</ITEM>
.....
Ну а в Вашем случае может получится так

Если у Вас xml имеет такой вид
Код: plaintext
1.
2.
3.
4.
5.
6.
<ROOT>
  ..........
  <LIN></LIN>
  <PIA></PIA>
  <QTY></QTY>
  ............
</ROOT>

То может быть будет работать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:foreach select="ROOT/*">
  <xsl:if test="local-name() = 'LIN'">
    <POSITIONNUMBER>
      <xsl:value-of select="LIN01"/>
    </POSITIONNUMBER>
    <PRODUCT>
      <xsl:value-of select="LIN03/LIN0301"/>
    </PRODUCT>
    <PRODUCTIDBUYER>
      <xsl:value-of select="following-sibling::PIA[1]/PIA02/PIA0201"/>
    </PRODUCTIDBUYER>
  </xsl:if>
</xsl:for-each>
Но я не уверен, что стандартами регламентировано, что for-each выбирает уузлы в порядке их следования
...
Рейтинг: 0 / 0
10.06.2008, 11:41
    #35366551
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
_Vasilisk_ Xsl _Vasilisk_По какому принципу связывать узлы <LIN> и <PIA>?
последовательно...
Это безобразие. Неужели нельзя вставлять тройки узлов <LIN>, <PIA>, <QTY> в один общий узел? Т.е. чтобы было так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
<ITEM>
  <LIN></LIN>
  <PIA></PIA>
  <QTY></QTY>
</ITEM
<ITEM>
  <LIN></LIN>
  <PIA></PIA>
  <QTY></QTY>
</ITEM>
.....

так правильно... так и надо...
наверное я не так обьяснил)
...
Рейтинг: 0 / 0
10.06.2008, 12:27
    #35366723
Xsl
Xsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
Написал вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<xsl:template match="LIN">
		<POSITION>
			<POSITIONNUMBER>
				<xsl:value-of select="LIN01"/>
			</POSITIONNUMBER>
			<PRODUCT>
				<xsl:value-of select="LIN03/LIN0301"/>
			</PRODUCT>

			<PRODUCTIDBUYER>
				<xsl:value-of select="following-sibling::PIA[1]/PIA02/PIA0201"/>
			</PRODUCTIDBUYER>
			<ORDEREDQUANTITY>
				<xsl:value-of select="following-sibling::QTY[1]/QTY01/QTY0102"/>
			</ORDEREDQUANTITY>
		</POSITION>
</xsl:template>
всё заработало...))) Ура!!!
.................

есть небольшой вопрос...
можно ли сделать так что после преобразования выходил не один xml файл.... а несколько???
тоесть у меня получается вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<ORDER>
<ORDER>
..........
</ORDER>
<ORDER>
..........
</ORDER>
</ORDER>
а хотелось бы что б каждый <ORDER></ORDER> был отдельным xml файлом.
Реально ли такое?
...
Рейтинг: 0 / 0
10.06.2008, 15:47
    #35367387
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
неа, только руками
...
Рейтинг: 0 / 0
10.06.2008, 16:49
    #35367632
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон в шаблоне
Смотреть в сторону параметрического XSL (RTFM <xsl:param>), но все равно будет получаться один файл, просто для n файлов нужно будет n раз вызвать преобразование.

Хотя если написать какое нибудь расширение на том же JScript с использованием FileSystemObject...

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


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