powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
23 сообщений из 23, страница 1 из 1
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331403
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть файл xml сторонней системы, это xml основанный на атрибутах, я его перевожу в файл основанный на элементах.
Это мой первый опыт с xslt, по доке сделал
Код: 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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
   <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
	<xsl:template match="/">

   <xsl:variable name="p_PosID"><xsl:value-of select="TransactionExport/StoreID/StoreData/@StoreId"/></xsl:variable>
   <xsl:variable name="p_PosName"><xsl:value-of select="TransactionExport/StoreID/StoreData/@StoreName"/></xsl:variable>

	<TableName>
	        
  		<xsl:for-each select="TransactionExport/StoreID/Tenders">
         <xsl:variable name="p_FuelShiftId"><xsl:value-of select="@FuelShiftId"/></xsl:variable>

  		<xsl:for-each select="Tender">
         <xsl:variable name="p_TenderName"><xsl:value-of select="@TenderName"/></xsl:variable>
         <xsl:variable name="p_TenderId"><xsl:value-of select="@TenderId"/></xsl:variable>
   
	  		<xsl:for-each select="TicketHeader">
	         <xsl:variable name="p_GlobalTransactionId"><xsl:value-of select="@GlobalTransactionId"/></xsl:variable>
	         <xsl:variable name="p_StartDateTime"><xsl:value-of select="@StartDateTime"/></xsl:variable>
   	      <xsl:variable name="p_EndDateTime"><xsl:value-of select="@EndDateTime"/></xsl:variable>
		  		<xsl:for-each select="TicketLine">
	            <Tran>
			         <xsl:element name="GlobalTransactionId">                
  				          <xsl:value-of select="$p_GlobalTransactionId"/>
     				   </xsl:element>
		      	   <xsl:element name="TenderId">                
			         	<xsl:value-of select="$p_TenderId"/>
	     			   </xsl:element>
			         <xsl:element name="TenderName">                
  				          <xsl:value-of select="$p_TenderName"/>
     				   </xsl:element>
			         <xsl:element name="StartDateTime">                
  				          <xsl:value-of select="$p_StartDateTime"/>
     				   </xsl:element>
		   	      <xsl:element name="EndDateTime">                
	  			          <xsl:value-of select="$p_EndDateTime"/>
   	  			   </xsl:element>
		   	      <xsl:element name="PosID">                
	  			          <xsl:value-of select="$p_PosID"/>
   	  			   </xsl:element>
		   	      <xsl:element name="PosName">                
	  			          <xsl:value-of select="$p_PosName"/>
   	  			   </xsl:element>
		   	      <xsl:element name="LineId">                
	  			          <xsl:value-of select="@LineId"/>
   	  			   </xsl:element>
		   	      <xsl:element name="ItemId">                
	  			          <xsl:value-of select="@ItemId"/>
   	  			   </xsl:element>                      
		   	      <xsl:element name="ItemName">                
	  			          <xsl:value-of select="ЧТО СЮДА ПИСАТЬ???????"/>
   	  			   </xsl:element>     
		   	      <xsl:element name="Qty">                
	  			          <xsl:value-of select="@Qty"/>
   	  			   </xsl:element>
		   	      <xsl:element name="ActualPrice">                
	  			          <xsl:value-of select="@ActualPrice"/>
   	  			   </xsl:element>
		   	      <xsl:element name="Tax">                
	  			          <xsl:value-of select="@Tax"/>
   	  			   </xsl:element>
		   	      <xsl:element name="Amount">                
	  			          <xsl:value-of select="@Amount"/>
   	  			   </xsl:element>      
	            </Tran>
	   		</xsl:for-each>
   		</xsl:for-each>
   	</xsl:for-each>
   	</xsl:for-each>
	</TableName>
   </xsl:template>
</xsl:stylesheet>


вроде понятно, бегу в циклах, сохраняю в переменных то что использую "глубже" (может как то можно и по другому, ну да ладно работает, в принципе также как если писать на алгоритмическом языке). есть инфа "ItemId" (ID товара), а вот его наименование находится вообще в другой секции файла (типа отдельно вначале перечисляются услуги с ID и наименованиями, а потом в транзакциях используют только ID), а мне нужно получить xml-плоскую таблицу, без всяких дополнительных секций и других прелестях нормализации. Так вот как подставить наименование, найти его в секции
TransactionExport\StoreID\FuelData\FuelItem\@FullName (где @FuelShiftId = $p_FuelShiftId и @MainItemId= @ItemId текущего элемента)?
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331410
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори за форматирование

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
<xsl:template match="/">

<xsl:variable name="p_PosID">
<xsl:value-of select="TransactionExport/StoreID/StoreData/@StoreId"/>
</xsl:variable>
<xsl:variable name="p_PosName">
<xsl:value-of select="TransactionExport/StoreID/StoreData/@StoreName"/>
</xsl:variable>

<TableName>

<xsl:for-each select="TransactionExport/StoreID/Tenders">
<xsl:variable name="p_FuelShiftId">
<xsl:value-of select="@FuelShiftId"/>
</xsl:variable>

<xsl:for-each select="Tender">
<xsl:variable name="p_TenderName">
<xsl:value-of select="@TenderName"/>
</xsl:variable>
<xsl:variable name="p_TenderId">
<xsl:value-of select="@TenderId"/>
</xsl:variable>

<xsl:for-each select="TicketHeader">
<xsl:variable name="p_GlobalTransactionId">
<xsl:value-of select="@GlobalTransactionId"/>
</xsl:variable>
<xsl:variable name="p_StartDateTime">
<xsl:value-of select="@StartDateTime"/>
</xsl:variable>
<xsl:variable name="p_EndDateTime">
<xsl:value-of select="@EndDateTime"/>
</xsl:variable>
<xsl:for-each select="TicketLine">
<Tran>
<xsl:element name="GlobalTransactionId">
<xsl:value-of select="$p_GlobalTransactionId"/>
</xsl:element>
<xsl:element name="TenderId">
<xsl:value-of select="$p_TenderId"/>
</xsl:element>
<xsl:element name="TenderName">
<xsl:value-of select="$p_TenderName"/>
</xsl:element>
<xsl:element name="StartDateTime">
<xsl:value-of select="$p_StartDateTime"/>
</xsl:element>
<xsl:element name="EndDateTime">
<xsl:value-of select="$p_EndDateTime"/>
</xsl:element>
<xsl:element name="PosID">
<xsl:value-of select="$p_PosID"/>
</xsl:element>
<xsl:element name="PosName">
<xsl:value-of select="$p_PosName"/>
</xsl:element>
<xsl:element name="LineId">
<xsl:value-of select="@LineId"/>
</xsl:element>
<xsl:element name="ItemId">
<xsl:value-of select="@ItemId"/>
</xsl:element>
<xsl:element name="ItemName">
<xsl:value-of select="ЧТО СЮДА ПИСАТЬ???????"/>
</xsl:element>
<xsl:element name="Qty">
<xsl:value-of select="@Qty"/>
</xsl:element>
<xsl:element name="ActualPrice">
<xsl:value-of select="@ActualPrice"/>
</xsl:element>
<xsl:element name="Tax">
<xsl:value-of select="@Tax"/>
</xsl:element>
<xsl:element name="Amount">
<xsl:value-of select="@Amount"/>
</xsl:element>
</Tran>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</TableName>
</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331411
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да блин
Код: 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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
   <xsl:template match="/">

      <xsl:variable name="p_PosID">
         <xsl:value-of select="TransactionExport/StoreID/StoreData/@StoreId"/>
      </xsl:variable>
      <xsl:variable name="p_PosName">
         <xsl:value-of select="TransactionExport/StoreID/StoreData/@StoreName"/>
      </xsl:variable>

      <TableName>

         <xsl:for-each select="TransactionExport/StoreID/Tenders">
            <xsl:variable name="p_FuelShiftId">
               <xsl:value-of select="@FuelShiftId"/>
            </xsl:variable>

            <xsl:for-each select="Tender">
               <xsl:variable name="p_TenderName">
                  <xsl:value-of select="@TenderName"/>
               </xsl:variable>
               <xsl:variable name="p_TenderId">
                  <xsl:value-of select="@TenderId"/>
               </xsl:variable>

               <xsl:for-each select="TicketHeader">
                  <xsl:variable name="p_GlobalTransactionId">
                     <xsl:value-of select="@GlobalTransactionId"/>
                  </xsl:variable>
                  <xsl:variable name="p_StartDateTime">
                     <xsl:value-of select="@StartDateTime"/>
                  </xsl:variable>
                  <xsl:variable name="p_EndDateTime">
                     <xsl:value-of select="@EndDateTime"/>
                  </xsl:variable>
                  <xsl:for-each select="TicketLine">
                     <Tran>
                        <xsl:element name="GlobalTransactionId">
                           <xsl:value-of select="$p_GlobalTransactionId"/>
                        </xsl:element>
                        <xsl:element name="TenderId">
                           <xsl:value-of select="$p_TenderId"/>
                        </xsl:element>
                        <xsl:element name="TenderName">
                           <xsl:value-of select="$p_TenderName"/>
                        </xsl:element>
                        <xsl:element name="StartDateTime">
                           <xsl:value-of select="$p_StartDateTime"/>
                        </xsl:element>
                        <xsl:element name="EndDateTime">
                           <xsl:value-of select="$p_EndDateTime"/>
                        </xsl:element>
                        <xsl:element name="PosID">
                           <xsl:value-of select="$p_PosID"/>
                        </xsl:element>
                        <xsl:element name="PosName">
                           <xsl:value-of select="$p_PosName"/>
                        </xsl:element>
                        <xsl:element name="LineId">
                           <xsl:value-of select="@LineId"/>
                        </xsl:element>
                        <xsl:element name="ItemId">
                           <xsl:value-of select="@ItemId"/>
                        </xsl:element>
                        <xsl:element name="ItemName">
                           <xsl:value-of select="ЧТО СЮДА ПИСАТЬ??????"/>
                        </xsl:element>
                        <xsl:element name="Qty">
                           <xsl:value-of select="@Qty"/>
                        </xsl:element>
                        <xsl:element name="ActualPrice">
                           <xsl:value-of select="@ActualPrice"/>
                        </xsl:element>
                        <xsl:element name="Tax">
                           <xsl:value-of select="@Tax"/>
                        </xsl:element>
                        <xsl:element name="Amount">
                           <xsl:value-of select="@Amount"/>
                        </xsl:element>
                     </Tran>
                  </xsl:for-each>
               </xsl:for-each>
            </xsl:for-each>
         </xsl:for-each>
      </TableName>
   </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331427
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть что то типа переменных - key-value словарей, я бы начитал в него услуг, а потом по ключу получал бы значение и подставлял? А то сдаётся мне что както не очень эфективно быдет на каждую транзакцию искать имя по всему файлу (хотя наверное кэширование разработчики библиотек xslt предусмотрели)
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331505
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кучно переделать атрибуты в элементы можно так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:apply-templates select="*@"/>

<xsl:template match="*@">
    <xsl:element name="{name()}">
        <xsl:value-of select="text()"/>
    </xsl:element>
</xsl:template>


По сабжу:
Код: xml
1.
<xsl:value-of select="ЧТО СЮДА ПИСАТЬ???????"/>

/TransactionExport/StoreID/FuelData/FuelItem/[@FuelShiftId = $p_FuelShiftId and @MainItemId= $p_ItemId]/@FullName
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331514
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это
Код: xml
1.
2.
3.
<xsl:variable name="p_TenderName">
    <xsl:value-of select="@TenderName"/>
</xsl:variable>

лучше записать так:
Код: xml
1.
<xsl:variable name="p_TenderName" select="@TenderName"/>

Букв меньше, код понятней.
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331548
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyКучно переделать атрибуты в элементы можно так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:apply-templates select="*@"/>

<xsl:template match="*@">
    <xsl:element name="{name()}">
        <xsl:value-of select="text()"/>
    </xsl:element>
</xsl:template>


По сабжу:
Код: xml
1.
<xsl:value-of select="ЧТО СЮДА ПИСАТЬ???????"/>

/TransactionExport/StoreID/FuelData/FuelItem/[@FuelShiftId = $p_FuelShiftId and @MainItemId= $p_ItemId]/@FullName
Спасибо
1. ну мне не все нужно атрибуты, там много не нужных мне.
2. т.е. @ItemID нужно тоже в переменную ($p_ItemId) сохранить перед тем как использовать в запросе?
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331669
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал так
Код: xml
1.
2.
3.
4.
5.
6.
7.
                        <xsl:variable name="p_ItemId" select="@ItemId" />
                        <xsl:element name="ItemId">
                           <xsl:value-of select="$p_ItemId"/>
                        </xsl:element>
                        <xsl:element name="ItemName">
                           <xsl:value-of select="TransactionExport/StoreID/FuelData/FuelItem/[@FuelShiftId = $p_FuelShiftId and @MainItemId= $p_ItemId]/@FullName" />
                        </xsl:element>



не работает, ругается на "[", пишет "Предполагается NodeTest .... -->[<-- ..."
библиотеку использую MSXML6.dll, без ItemName работает отлично, может нужно как то экранировать []?
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38331872
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. ну мне не все нужно атрибуты, там много не нужных мне.select="@attr1|@attr2..."
2. т.е. @ItemID нужно тоже в переменную ($p_ItemId) сохранить перед тем как использовать в запросе?Или так или current()
может нужно как то экранировать []?Нет, просто здесь — FuelItem/[ — не нужен слеш.
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332344
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как заюзать CDATA?
Сделал
Код: xml
1.
2.
3.
                           <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
                           <xsl:value-of select="$p_TenderName" />
                           <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>


Но если в $p_TenderName есть "<" они не превращаются в "<"
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332372
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да так и заюзать — <![CDATA[ ]]>
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332382
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДа так и заюзать — <![CDATA[ ]]>
В истодном файле в значении атрибута без CDATA, со всякими дурацкими &XXX;, в итоговом файле хочу получить CDATA и все спецсимволы в натуральном виде
&quote; сами в нормальный сами в нормальный вид превралились, а <> не хотят
получается вообще хрень
<![CDATA[ООО "Бла-бла-бла &lq; .... " ]]>
а надо
<![CDATA[ООО "Бла-бла-бла < .... " ]]>
Просто работь с файлом (не читать ридером в программе, а натурально просматривать и искать в редакторе текст) удобнее когда нет всяких &lq; а есть нормальный текст
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332398
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много слов, мало смысла. Давай пример того, что есть и того, что надо.
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332467
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть
Код: xml
1.
<Tender FuelShiftId="301" TenderId="1" TenderName="&quot;Супер&lt;пупер&gt;&quot;" ...>



надо
Код: xml
1.
<TenderName><![CDATA["Cупер<пупер>"]]</TenderName>



Делаю сперва
Код: xml
1.
<xsl:variable name="p_TenderName" select="@TenderName" />


потом
Код: xml
1.
2.
3.
<xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
<xsl:value-of select="$p_TenderName" />
<xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>



получаю
Код: xml
1.
<TenderName><![CDATA["Cупер&lt;пупер&gt;>"]]</TenderName>
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332468
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
<TenderName><![CDATA["Cупер&lt;пупер&gt;"]]</TenderName>
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332481
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
<xsl:value-of select="$p_TenderName"  disable-output-escaping="yes" />
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332594
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: xml
1.
<xsl:value-of select="$p_TenderName"  disable-output-escaping="yes" />


спасибо, отлично
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332610
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернемся к поиску значений
есть запрос, он работает
Код: plaintext
/TransactionExport/StoreID/FuelData/FuelItem[@FuelShiftId = $p_FuelShiftId and @MainItemId= $p_ItemId]/@FullName
но работает очень медленно, т.е. как только добавил получение наименования вмесо одной секунды обработка стала секунд 10, а файлов дофига

Может как то можно сначала собрать в переменную все FuelItem, а потом искать в них, тормозе как я понял из-за того что внутри FuelItem тоже куча элементов, и чтоб найти нужный FuelItem нужно прочитать кучу элементов, а кэширования типа нету. Из всего штук 5-10 в файле, а операций для которых они ищутся тысячи. Может можно как то запихать во временный словарь?
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332636
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.к. наверное переменная должна содержать просто начение а узлы

из
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<FuelData FuelShiftId="301" ParentId="1">
   <FuelItem MainItemId="110101001" FullName="Бензин фирменный PULSAR-95 класс 5" FuelShiftId="301">
      <куча строк всякой инфы ...>
   </FuelItem> 
   <FuelItem MainItemId="110102000" FullName="Бензин Регуляр Евро-92 класс 5" FuelShiftId="301">
      <куча строк всякой инфы ...>
   </FuelItem> 
   <FuelItem MainItemId="110108000" FullName="Дизельное топливо летнее" FuelShiftId="301">
      <куча строк всякой инфы ...>
   </FuelItem> 
</FuelData>
<FuelData FuelShiftId="302" ParentId="1">
   <FuelItem MainItemId="110101001" FullName="Бензин фирменный PULSAR-95 класс 5" FuelShiftId="302">
      <куча строк всякой инфы ...>
   </FuelItem> 
   <FuelItem MainItemId="110102000" FullName="Бензин Регуляр Евро-92 класс 5" FuelShiftId="302">
      <куча строк всякой инфы ...>
   </FuelItem> 
   <FuelItem MainItemId="110108000" FullName="Дизельное топливо летнее" FuelShiftId="302">
      <куча строк всякой инфы ...>
   </FuelItem> 
</FuelData>



получить переменную
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<xsl:variable name="p_Items">
   <FuelItem MainItemId="110101001" FullName="Бензин фирменный PULSAR-95 класс 5" FuelShiftId="301">
   <FuelItem MainItemId="110102000" FullName="Бензин Регуляр Евро-92 класс 5" FuelShiftId="301">
   <FuelItem MainItemId="110108000" FullName="Дизельное топливо летнее" FuelShiftId="301">
   <FuelItem MainItemId="110101001" FullName="Бензин фирменный PULSAR-95 класс 5" FuelShiftId="302">
   <FuelItem MainItemId="110102000" FullName="Бензин Регуляр Евро-92 класс 5" FuelShiftId="302">
   <FuelItem MainItemId="110108000" FullName="Дизельное топливо летнее" FuelShiftId="302">
</xsl:variable>



и потом к ней делать xpath запрос
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38332774
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38333013
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Ура, сделал 
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                >

   <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />

   <xsl:variable name="p_FuelItemsTmp" >
      <xsl:for-each select="//TransactionExport/StoreID/FuelData/FuelItem">
         <FuelItem FuelShiftId="{@FuelShiftId}" ItemId="{@MainItemId}" ItemName="{@FullName}" />
      </xsl:for-each>
   </xsl:variable>
   <xsl:variable name="p_FuelItems" select="msxsl:node-set($p_FuelItemsTmp)" />
   <xsl:template match="/">

      <TableName>
....
                   <xsl:element name="ItemName">
                           <xsl:value-of select="$p_FuelItems/FuelItem[@FuelShiftId = $p_FuelShiftId and @ItemId = $p_ItemId]/@ItemName" />
                        </xsl:element>
....



Только почемуто в результате теперь корневой элемент не просто <TableName>
а
Код: xml
1.
<TableName xmlns:msxsl="urn:schemas-microsoft-com:xslt">


как сделать чтоб наймспейс не добавлялся, откуда он вылез в моём теге то?
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38333087
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
<xsl:stylesheet exclude-result-prefixes="msxsl" ...
...
Рейтинг: 0 / 0
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
    #38333125
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: xml
1.
<xsl:stylesheet exclude-result-prefixes="msxsl" ...


отлично, спасибо огромное

и еще один последний вопрос и идеально будет
Есть элемент
Код: xml
1.
<Shift FuelShiftId="301" ShiftStartTime="00:03" ShiftEndTime="05:01" ShiftStartDate="1-6-2013" ShiftEndDate="1-6-2013" />


Хочу преобразовать в
Код: xml
1.
<Shift FuelShiftId="301" ShiftStart="2013-06-01T00:03:00" ShiftEnd="2013-06-01T05:01:00" />



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


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