powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Дублирование узлов
12 сообщений из 12, страница 1 из 1
Дублирование узлов
    #35625077
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.
<ROOT>
	<LIN> 1 </LIN>
	<PIA><PIA01>SA</PIA01>
		 <PIA02> 435654 </PIA02>
	</PIA>
	<PIA><PIA01>IN</PIA01>
		 <PIA02> 5676 </PIA02>
	</PIA>
	<LIN> 2 </LIN>
	<PIA><PIA01>SA</PIA01>
		 <PIA02> 56732756 </PIA02>
	</PIA>
	<PIA><PIA01>IN</PIA01>
		 <PIA02> 256479786 </PIA02>
	</PIA>
	<LIN> 3 </LIN>
	<PIA><PIA01>IN</PIA01>
		 <PIA02> 45672257 </PIA02>
	</PIA>
	<LIN> 4 </LIN>
	<PIA><PIA01>IN</PIA01>
		 <PIA02> 27680576 </PIA02>
	</PIA>
</ROOT>
Делаю преобразование:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<xsl:template match="/">
	<ORDER><xsl:apply-templates select="ROOT/LIN"/></ORDER>
</xsl:template>

<xsl:template match="LIN">
	<POSITION><xsl:value-of select="."/></POSITION>
	<xsl:apply-templates select="following-sibling::PIA[1]"/>
	<xsl:apply-templates select="following-sibling::PIA[2]"/>
</xsl:template>

<xsl:template match="PIA">
<xsl:choose>
	<xsl:when test="PIA01 = 'IN'">
	<IN><xsl:value-of select="PIA02"/></IN>
	</xsl:when>
	<xsl:when test="PIA01 = 'SA'">
	<SA><xsl:value-of select="PIA02"/></SA>
	</xsl:when>
</xsl:choose>
</xsl:template>
В результате получаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<ORDER>
  <POSITION> 1 </POSITION>
  <SA> 435654 </SA>
  <IN> 5676 </IN>
  <POSITION> 2 </POSITION>
  <SA> 56732756 </SA>
  <IN> 256479786 </IN>
  <POSITION> 3 </POSITION>
  <IN> 45672257 </IN>
  <IN> 27680576 </IN>
  <POSITION> 4 </POSITION>
  <IN> 27680576 </IN>
</ORDER>
Обратите внимание на POSITION 3, после него IN дублируется 2 раза. Как этого можно избежать? Что б на выходе получался вот такой xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<ORDER>
  <POSITION> 1 </POSITION>
  <SA> 435654 </SA>
  <IN> 5676 </IN>
  <POSITION> 2 </POSITION>
  <SA> 56732756 </SA>
  <IN> 256479786 </IN>
  <POSITION> 3 </POSITION>
  <IN> 45672257 </IN>
  <POSITION> 4 </POSITION>
  <IN> 27680576 </IN>
</ORDER>

Спасибо!
...
Рейтинг: 0 / 0
Дублирование узлов
    #35625736
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if PIA[1]/PIA01='SA'
...
Рейтинг: 0 / 0
Дублирование узлов
    #35626145
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
попробовал....:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xsl:template match="/">
	<ORDER><xsl:apply-templates select="ROOT/LIN"/></ORDER>
</xsl:template>

<xsl:template match="LIN">
	<NUMBER><xsl:value-of select="."/></NUMBER>
	<xsl:apply-templates select="following-sibling::PIA"/>
</xsl:template>

<xsl:template match="PIA">

<xsl:if test="PIA[1]/PIA01 = 'SA'">
<SA><xsl:value-of select="PIA02"/></SA>
</xsl:if>

</xsl:template>
результат не правильный.
Код: plaintext
1.
2.
3.
4.
5.
<ORDER>
  <NUMBER> 1 </NUMBER>
  <NUMBER> 2 </NUMBER>
  <NUMBER> 3 </NUMBER>
  <NUMBER> 4 </NUMBER>
</ORDER>

может я неправильно понял куда подставлять?
...
Рейтинг: 0 / 0
Дублирование узлов
    #35626198
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
maXmoif PIA[1]/PIA01='SA'
если чесно... не пойму почему так...
мне ведь мне надо исключить повтор IN если SA отсутствует.
...
Рейтинг: 0 / 0
Дублирование узлов
    #35627365
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xslможет я неправильно понял куда подставлять?ога
...
Рейтинг: 0 / 0
Дублирование узлов
    #35627386
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
maXmoXslможет я неправильно понял куда подставлять?ога
подскажи пожалуйста куда :)
...
Рейтинг: 0 / 0
Дублирование узлов
    #35627435
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вокруг <xsl:apply-templates select="following-sibling::PIA[2]"/>
...
Рейтинг: 0 / 0
Дублирование узлов
    #35627815
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
maXmoвокруг <xsl:apply-templates select="following-sibling::PIA[2]"/>
не получается :(
XSL
Код: plaintext
1.
2.
3.
4.
5.
6.
<xsl:template match="LIN">
	<POSITION><xsl:value-of select="."/></POSITION>
	<xsl:apply-templates select="following-sibling::PIA[1]"/>
	<xsl:if test="../PIA[1]/PIA01='SA'">
	<xsl:apply-templates select="following-sibling::PIA[2]"/>
	</xsl:if>
</xsl:template>

OUT
Код: plaintext
1.
2.
3.
4.
5.
6.
<ORDER>........
  <POSITION> 3 </POSITION>
  <IN> 45672257 </IN>
  <IN> 27680576 </IN>  ----- дублируется :(
  <POSITION> 4 </POSITION>
  <IN> 27680576 </IN>
</ORDER>
...
Рейтинг: 0 / 0
Дублирование узлов
    #35628345
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
осталось только ещё чуть-чуть поднапрячь извилину и всё заработает.
...
Рейтинг: 0 / 0
Дублирование узлов
    #35632002
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
maXmoосталось только ещё чуть-чуть поднапрячь извилину и всё заработает.
просидел все выходные над этим делом.... ниче не получилось....
maXmo , пожалуйста подскажи как его сделать... это мне будет ....ц :(
...
Рейтинг: 0 / 0
Дублирование узлов
    #35632723
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
ребята спасите! пожалуйста!
может это и легкая задача... но ниче у мня не получается... :(
...
Рейтинг: 0 / 0
Дублирование узлов
    #35635662
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
Огромное СПАСИБИЩЕ maXmo!!!!!!!!!!!!
Кому интересно... вот решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
<xsl:template match="LIN">
	<POSITION><xsl:value-of select="."/></POSITION>
	<xsl:apply-templates select="following-sibling::PIA[1]"/>
	<xsl:if test="following-sibling::PIA[1]/PIA01='SA'">
	<xsl:apply-templates select="following-sibling::PIA[2]"/>
	</xsl:if>
</xsl:template>
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Дублирование узлов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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