powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Шаблон в шаблоне
9 сообщений из 9, страница 1 из 1
Шаблон в шаблоне
    #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
Шаблон в шаблоне
    #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
Шаблон в шаблоне
    #35365704
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По какому принципу связывать узлы <LIN> и <PIA>?

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

С уважением, Vasilisk
последовательно...
как на примере:
Код: plaintext
1.
2.
3.
4.
...
<LIN></LIN>
<PIA></PIA>
<QTY></QTY>
.....
...
Рейтинг: 0 / 0
Шаблон в шаблоне
    #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
Шаблон в шаблоне
    #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
Шаблон в шаблоне
    #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
Шаблон в шаблоне
    #35367387
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неа, только руками
...
Рейтинг: 0 / 0
Шаблон в шаблоне
    #35367632
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотреть в сторону параметрического XSL (RTFM <xsl:param>), но все равно будет получаться один файл, просто для n файлов нужно будет n раз вызвать преобразование.

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

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


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