powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml to xml, помощь c xsl
7 сообщений из 7, страница 1 из 1
xml to xml, помощь c xsl
    #38110298
ryde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем! прошу помощи в написании XSL, т.к в xml и xsl я новичек, сложно самому пока что разобраться из кучи предоставленной информации. по своему вопросу некоторые моменты нашел, по остальным наверное не заметил по неопытности в xml.
буквально на днях, получено было задание сделать разовый обмен между учетными системами с помощью xml.
данных оч много, потому примеры маленькие.

Исходник: к примеру in.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<data>
 <customers>
  <customer>
   <uncustomer>00000000-0000-0000-0000-000000000111</uncustomer> 
   <name>А</name> 
   <adres>Центральная 1</adres> 
   <inn>701000000001</inn> 
   <unagent>00000000-0000-0000-0000-000000000121</unagent> 
   <fio>Жуков Жук Жукович</fio> 
   <marshrut>5</marshrut> 
  </customer>
..............
  <customer>
   <uncustomer>00000000-0000-0000-0000-000000000112</uncustomer> 
   <name>Б</name> 
   <adres>Центральная 2</adres> 
   <inn>701000000002</inn> 
   <unagent>00000000-0000-0000-0000-000000000122</unagent> 
   <fio>Иванов Иван Иванович</fio> 
   <marshrut>5</marshrut> 
  </customer>
 </customers>
</data>



На выходе нужно: к примеру out.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<!-- начало таким и оставить, после след комментария уже должно идти заполнение -->
<DATA DBVERSION="1977">
 <CATALOGS Comment="Справочники">
 <CATALOG GUID="0E3CBAEA-5467-45CD-8C86-FB1777DA435B" Comment="Справочник.Фирмы">
 <ELEMENTS>
  <ITEM GUID="3423A6C5-20B3-4AF8-839D-E1B3894867DC" Name="Продторг" A02="1" A03="" A04="" A05="000000000001" A06="" A07="" A09="" A010="ТМ" A011="" A012="" A013="" A014="" A015="" A016="" A017="Продторг" /> 
  </ELEMENTS>
  </CATALOG>
 <CATALOG GUID="9450980F-FB59-47E3-BAE2-AA3C58441B1A" Comment="Справочник.Контрагенты">
 <GROUPS>
 <GROUP GUID="1E18C8DB-08F6-47DA-874B-100D6E109AB8">
  <ELEMENTS /> 
  </GROUP>
  </GROUPS>
 <ELEMENTS> 
<!-- от сюда уже нужно заполнить из in.xml, еще и атрибуты вставить. в значения вставлю теги из in. xml, что бы понятно что куда и откуда -->
<!-- в каких атрибутах не будет тега из in. xml, такими надо и оставить  -->
  <ITEM GUID="<uncustomer>" Name="<name>" A05="0" A06="" A08="" A012="<name>" A013="<inn>" A014="" A015="0" A016="0" A017="0" A018="0" GrpId0="" /> 
.................
<ITEM GUID="<uncustomer>" Name="<name>" A05="0" A06="" A08="" A012="<name>" A013="<inn>" A014="" A015="0" A016="0" A017="0" A018="0" GrpId0="" /> 
  </ELEMENTS>
  </CATALOG>
 </CATALOGS>
</DATA>



я пробовал сам написать xsl, но дальше не знаю уже, запутался((
Код: xml
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"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">

<DATA DBVERSION="1977">
 <CATALOGS Comment="Справочники">
  <CATALOG GUID="0E3CBAEA-5467-45CD-8C86-FB1777DA435B" Comment="Справочник.Фирмы">
   <ELEMENTS>
   <ITEM GUID="3423A6C5-20B3-4AF8-839D-E1B3894867DC" Name="Продторг" A02="1" A03="" A04="" A05="000000000001" A06="" A07="" A09="" A010="ТМ" A011="" A012="" A013="" A014="" A015="" A016="" A017="Продторг" /> 
   </ELEMENTS>
  </CATALOG>
  <CATALOG GUID="9450980F-FB59-47E3-BAE2-AA3C58441B1A" Comment="Справочник.Контрагенты">
   <GROUPS>
    <GROUP GUID="1E18C8DB-08F6-47DA-874B-100D6E109AB8"><ELEMENTS/></GROUP>
   </GROUPS>
   <ELEMENTS>      
        <ITEM GUID="{data/customers/customer/uncustomer}" Name="{data/customers/customer/name}" A05="0" A06="" 
        A08="E122B696-7794-4FD7-BAC4-CB481362799A" A012="{data/customers/customer/name}" A013="{data/customers/customer/inn}" 
        A014="" A015="0" A016="0" A017="0" A018="0" GrpId0=""/>
   </ELEMENTS>
  </CATALOG>
 </CATALOGS>    
</DATA>

</xsl:template>



Вроде для знающих просто, а для меня пока что сложновато)
по успешному результату помощнику кину деньжат на тел!
За раннее спасибо)
...
Рейтинг: 0 / 0
xml to xml, помощь c xsl
    #38110543
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ryde,

с гуидами XSLне работает, не знаю откуда вы их брать будете, что касается преобразования кастомеров в итемы, то это так делается:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<CATALOG GUID="9450980F-FB59-47E3-BAE2-AA3C58441B1A" Comment="Справочник.Контрагенты">
   <GROUPS>
       <GROUP GUID="1E18C8DB-08F6-47DA-874B-100D6E109AB8"><ELEMENTS/></GROUP>
   </GROUPS>
   <ELEMENTS>
        <xsl:for-each select="/data/customers/customer">      
            <ITEM 
                GUID="{uncustomer/text()}"
                Name="{name/text()}"
                A05="0"
                A06="" 
                A08="{generate-id()}"
                A012="{name/text()}"
                A013="{inn/text()}" 
                A014=""
                A015="0"
                A016="0"
                A017="0"
                A018="0"
                GrpId0=""
            />
        </xsl:for-each>
   </ELEMENTS>
</CATALOG>
...
Рейтинг: 0 / 0
xml to xml, помощь c xsl
    #38110552
ryde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, помогло, спасибо большое Вам!
сообщите мне в ЛС свой номер сот тел, кину обещанные!
...
Рейтинг: 0 / 0
xml to xml, помощь c xsl
    #38110566
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ryde,

про деньги не дочитал, иначе бы не отвечал. денег не надо, тем более, что ответ не потребовал от меня сколько бы ощутимых затрат. приберегите на более сложные работы.
...
Рейтинг: 0 / 0
xml to xml, помощь c xsl
    #38110598
ryde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan,
я уважаю чужой труд ровно так же, как и свой. Вы мне помогли сэкономить мое время, а время - деньги, и т.к Вы виновник сей экономии, потому и решил хоть как то поделиться.
В любом случае, еще раз спасибо за помощь, и успехов Вам!
...
Рейтинг: 0 / 0
xml to xml, помощь c xsl
    #38113415
ryde
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если такая ситуация:

на входе:
Код: xml
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.
<data>
 <items>
  <item>
   <unInventory>00000000-0000-0000-0000-000000010181</unInventory> 
   <name>Wispa плитка 6х13х87г</name> 
   <unInventorycat>00000000-0000-0000-0000-0000EDBE7010</unInventorycat> 
   <Inventorycat>кэдбэри</Inventorycat> 
   <price>32,8</price> 
   <units>шт</units> 
   <nds>18</nds> 
   <ostatok>1273</ostatok> 
   <unstock>00000000-0000-0000-0000-002130706437</unstock> 
   <stock>№ 6</stock> 
  </item>
.....................
  <item>
   <unInventory>00000000-0000-0000-0000-000000000965</unInventory> 
   <name>J7 SL Персик 12х1л</name> 
   <unInventorycat>00000000-0000-0000-0000-000000017231</unInventorycat> 
   <Inventorycat>соки ВиммБильДанн</Inventorycat> 
   <price>64,25</price> 
   <units>шт</units> 
   <nds>10</nds> 
   <ostatok>13</ostatok> 
   <unstock>00000000-0000-0000-0000-000000000005</unstock> 
   <stock>база</stock> 
  </item>
 </items>
</data>



нужно:
Код: xml
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
 <DATA DBVERSION="1977">
  <CATALOGS Comment="Справочники">
   <CATALOG GUID="D6D52ADA-0F38-4112-AF3C-2F1E425A43D1" Comment="Справочник.Номенклатура" KILLALL="1">
    <GROUPS>
     <GROUP GUID="8E502A85-8DD4-41CF-A7A4-17AB50872D36" Comment="Элементы группировки по иерархии">
      <ELEMENTS>
       <ITEM GUID="00000000-0000-0000-0000-000000BA7000" Name="*B.A.T." ParId="" /> 
      </ELEMENTS>
     </GROUP>
  </GROUPS>
  <ELEMENTS Comment="Элементы справочника 'Номенклатура'" KILLALL="1">
   <ITEM GUID="00000000-0000-0000-0000-000000010181" Name="Wispa плитка 6х13х87г" Code="" 
A04="18" A06="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A08="0" A011="1273" 
A013="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A014="0" A015="0" A035="Wispa плитка 6х13х87г" 
A037="1" A038="0" A039="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A041="0" A042="" A043="" 
A044="1" A048="5CAD72C4-5065-4EFC-B2C0-DC66FCDB0279" A049="" 
GrpId0="00000000-0000-0000-0000-000000BA7000" GrpId1="" A020="32,8" A030="1273" A031="0" A032="0" A033="0" A034="0" /> 
   <ITEM GUID="00000000-0000-0000-0000-000000000965" Name="J7 SL Персик 12х1л" Code="" 
A04="10" A06="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A08="0" A011="13" 
A013="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A014="0" A015="0" A035="J7 SL Персик 12х1л" A037="1" 
A038="0" A039="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A041="0" A042="" A043="" A044="1" 
A048="5CAD72C4-5065-4EFC-B2C0-DC66FCDB0279" A049="" GrpId0="00000000-0000-0000-0000-000000BA7000" 
GrpId1="" A020="64,25" A030="0" A031="13" A032="0" A033="0" A034="0" />
  </CATALOG>
 <CATALOG GUID="80452C60-B442-4DA9-A048-42F63270CA14" Comment="Справочник.ЕдиницыИзмерения">
  <ELEMENTS>
   <ITEM GUID="5B0C71F0-0A98-40AF-AA41-4615AD66845E" Name="шт" A02="1" A03="D5B4A5A0-9CA5-4003-9BB4-66CB811ACC16" A04="0" /> 
  </ELEMENTS>
 </CATALOG>
 <CATALOG GUID="00F1FFE7-E16E-4FF4-9EF1-B8D0C54BDF59" Comment="Справочник.ТипыЦен">
  <ELEMENTS>
   <ITEM GUID="8443D2A7-1705-4882-B1B5-32C295FB51EA" Name="Розничная" Code="0" A02="1" /> 
  </ELEMENTS>
 </CATALOG>
 <CATALOG GUID="2516FFCE-F46F-4326-BE00-438EF0871D30" Comment="Справочник.Склады" KILLALL="1">
  <ELEMENTS>
   <ITEM GUID="00000000-0000-0000-0000-002130706437" Name="№ 6" Code="0" /> 
   <ITEM GUID="00000000-0000-0000-0000-000000000005" Name="база" Code="1" /> 
   <ITEM GUID="00000000-0000-0000-0000-002130706438" Name="склад 1/8" Code="2" /> 
   <ITEM GUID="00000000-0000-0000-0000-002130706439" Name="склад 4/3" Code="3" /> 
   <ITEM GUID="00000000-0000-0000-0000-002130706440" Name="склад 4/4" Code="4" /> 
   <ITEM GUID="00000000-0000-0000-0000-002130706434" Name="ТЗРО" Code="5" /> 
  </ELEMENTS>
 </CATALOG>
</CATALOGS>
</DATA>



XSL
Код: xml
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
<DATA DBVERSION="1977">
	<CATALOGS Comment="Справочники">
		<CATALOG GUID="D6D52ADA-0F38-4112-AF3C-2F1E425A43D1" Comment="Справочник.Номенклатура" KILLALL="1">
			<GROUPS>
				<GROUP GUID="8E502A85-8DD4-41CF-A7A4-17AB50872D36" Comment="Элементы группировки по иерархии">
					<ELEMENTS>
  						<ITEM GUID="00000000-0000-0000-0000-000000BA7000" Name="*B.A.T." ParId="" />
					</ELEMENTS>
				</GROUP>
			</GROUPS>
			<ELEMENTS Comment="Элементы справочника 'Номенклатура'" KILLALL="1">
			<xsl:for-each select="/data/items/item">
				<ITEM GUID="{unInventory/text()}" Name="{name/text()}" Code="" A04="{nds/text()}" 
						A06="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A08="0" A011="{ostatok/text()}" A013="5B0C71F0-0A98-40AF-AA41-4615AD66845E" 
						A014="0" A015="0" A035="{name/text()}" A037="1" A038="0" A039="5B0C71F0-0A98-40AF-AA41-4615AD66845E" 
						A041="0" A042="" A043="" A044="1" A048="5CAD72C4-5065-4EFC-B2C0-DC66FCDB0279" A049="" 
						GrpId0="00000000-0000-0000-0000-000000BA7000" GrpId1="" A020="{price/text()}" 
						A030="{ostatok/text()}" <!-- остатки склада "№ 6" -->
						A031="{ostatok/text()}" <!-- остатки склада "база" -->
						A032="{ostatok/text()}" <!-- остатки склада "склад 1/8" -->
						A033="{ostatok/text()}" <!-- остатки склада "склад 4/3" -->
						A034="{ostatok/text()}" <!-- и т.д. -->
                                > 
				</ITEM>
			</xsl:for-each>
			</ELEMENTS>
		</CATALOG>
		<CATALOG GUID="80452C60-B442-4DA9-A048-42F63270CA14" Comment="Справочник.ЕдиницыИзмерения">
			<ELEMENTS>
				<ITEM GUID="5B0C71F0-0A98-40AF-AA41-4615AD66845E" Name="шт" A02="1" A03="D5B4A5A0-9CA5-4003-9BB4-66CB811ACC16" A04="0"/>
			</ELEMENTS>
		</CATALOG>
		<CATALOG GUID="00F1FFE7-E16E-4FF4-9EF1-B8D0C54BDF59" Comment="Справочник.ТипыЦен">
			<ELEMENTS>
				<ITEM GUID="8443D2A7-1705-4882-B1B5-32C295FB51EA" Name="Розничная" Code="0" A02="1"/>
			</ELEMENTS>
		</CATALOG>
		<CATALOG GUID="2516FFCE-F46F-4326-BE00-438EF0871D30" Comment="Справочник.Склады" KILLALL="1">
			<ELEMENTS>
				<ITEM GUID="00000000-0000-0000-0000-002130706437" Name="№ 6" Code="0"/>
				<ITEM GUID="00000000-0000-0000-0000-000000000005" Name="база" Code="1"/>
				<ITEM GUID="00000000-0000-0000-0000-002130706438" Name="склад 1/8" Code="2"/>
				<ITEM GUID="00000000-0000-0000-0000-002130706439" Name="склад 4/3" Code="3"/>
				<ITEM GUID="00000000-0000-0000-0000-002130706440" Name="склад 4/4" Code="4"/>
				<ITEM GUID="00000000-0000-0000-0000-002130706434" Name="ТЗРО" Code="5"/>
				
			</ELEMENTS>
		</CATALOG>
	</CATALOGS>
</DATA>
</xsl:template>

</xsl:stylesheet>



как мне правильно сделать, что бы остатки по необходимым атрибутам заполнялись, а по не занятым атрибутам "0" ?
т.е. если есть к примеру совпадение, то вставляем значение, если нет, то "0"
я смотрел по if then else, но почему то не получилось корректно с ним сработать, если его вставлять в xsl, где атрибут после=, к примеру A030="{ostatok/text()}"
...
Рейтинг: 0 / 0
xml to xml, помощь c xsl
    #38113820
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ryde,

Код: xml
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
<ITEM GUID="{unInventory/text()}" Name="{name/text()}" Code="" A04="{nds/text()}" 
	A06="5B0C71F0-0A98-40AF-AA41-4615AD66845E" A08="0" A011="{ostatok/text()}" A013="5B0C71F0-0A98-40AF-AA41-4615AD66845E" 
	A014="0" A015="0" A035="{name/text()}" A037="1" A038="0" A039="5B0C71F0-0A98-40AF-AA41-4615AD66845E" 
	A041="0" A042="" A043="" A044="1" A048="5CAD72C4-5065-4EFC-B2C0-DC66FCDB0279" A049="" 
	GrpId0="00000000-0000-0000-0000-000000BA7000" GrpId1="" A020="{price/text()}" 
       >
            <xsl:attribute name="A030">
                 <xsl:choose>
                     <xsl:when test="stock/text()='№ 6'">
                          <xsl:value-of select="ostatok/text()" />
                     </xsl:when>
                     <xsl:otherwise>0</xsl:otherwise>
                 </xsl:choose>
            </xsl:attribute>
            <xsl:attribute name="A031">
                 <xsl:choose>
                     <xsl:when test="stock/text()='база'">
                          <xsl:value-of select="ostatok/text()" />
                     </xsl:when>
                     <xsl:otherwise>0</xsl:otherwise>
                 </xsl:choose>
            </xsl:attribute>
            <xsl:attribute name="A032">
                 <xsl:choose>
                     <xsl:when test="stock/text()='склад 1/8'">
                          <xsl:value-of select="ostatok/text()" />
                     </xsl:when>
                     <xsl:otherwise>0</xsl:otherwise>
                 </xsl:choose>
            </xsl:attribute>
            <xsl:attribute name="A033">
                 <xsl:choose>
                     <xsl:when test="stock/text()='склад 4/3'">
                          <xsl:value-of select="ostatok/text()" />
                     </xsl:when>
                     <xsl:otherwise>0</xsl:otherwise>
                 </xsl:choose>
            </xsl:attribute>
            <xsl:attribute name="A034">
                 <xsl:choose>
                     <xsl:when test="stock/text()='и т.д.'">
                          <xsl:value-of select="ostatok/text()" />
                     </xsl:when>
                     <xsl:otherwise>0</xsl:otherwise>
                 </xsl:choose>
            </xsl:attribute>
</ITEM>
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml to xml, помощь c xsl
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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