Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его / 23 сообщений из 23, страница 1 из 1
15.07.2013, 14:26
    #38331403
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
есть файл 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
15.07.2013, 14:28
    #38331410
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
сори за форматирование

<?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
15.07.2013, 14:29
    #38331411
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.
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
15.07.2013, 14:37
    #38331427
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Может есть что то типа переменных - key-value словарей, я бы начитал в него услуг, а потом по ключу получал бы значение и подставлял? А то сдаётся мне что както не очень эфективно быдет на каждую транзакцию искать имя по всему файлу (хотя наверное кэширование разработчики библиотек xslt предусмотрели)
...
Рейтинг: 0 / 0
15.07.2013, 15:22
    #38331505
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Кучно переделать атрибуты в элементы можно так:

Код: 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
15.07.2013, 15:27
    #38331514
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Это
Код: 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
15.07.2013, 15:47
    #38331548
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
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
15.07.2013, 16:52
    #38331669
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
сделал так
Код: 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
15.07.2013, 18:54
    #38331872
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
1. ну мне не все нужно атрибуты, там много не нужных мне.select="@attr1|@attr2..."
2. т.е. @ItemID нужно тоже в переменную ($p_ItemId) сохранить перед тем как использовать в запросе?Или так или current()
может нужно как то экранировать []?Нет, просто здесь — FuelItem/[ — не нужен слеш.
...
Рейтинг: 0 / 0
16.07.2013, 10:46
    #38332344
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Как заюзать 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
16.07.2013, 11:04
    #38332372
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Да так и заюзать — <![CDATA[ ]]>
...
Рейтинг: 0 / 0
16.07.2013, 11:13
    #38332382
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
AntonariyДа так и заюзать — <![CDATA[ ]]>
В истодном файле в значении атрибута без CDATA, со всякими дурацкими &XXX;, в итоговом файле хочу получить CDATA и все спецсимволы в натуральном виде
&quote; сами в нормальный сами в нормальный вид превралились, а <> не хотят
получается вообще хрень
<![CDATA[ООО "Бла-бла-бла &lq; .... " ]]>
а надо
<![CDATA[ООО "Бла-бла-бла < .... " ]]>
Просто работь с файлом (не читать ридером в программе, а натурально просматривать и искать в редакторе текст) удобнее когда нет всяких &lq; а есть нормальный текст
...
Рейтинг: 0 / 0
16.07.2013, 11:20
    #38332398
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Много слов, мало смысла. Давай пример того, что есть и того, что надо.
...
Рейтинг: 0 / 0
16.07.2013, 11:54
    #38332467
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Есть
Код: 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
16.07.2013, 11:56
    #38332468
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Код: xml
1.
<TenderName><![CDATA["Cупер&lt;пупер&gt;"]]</TenderName>
...
Рейтинг: 0 / 0
16.07.2013, 12:02
    #38332481
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Код: xml
1.
<xsl:value-of select="$p_TenderName"  disable-output-escaping="yes" />
...
Рейтинг: 0 / 0
16.07.2013, 12:54
    #38332594
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Antonariy
Код: xml
1.
<xsl:value-of select="$p_TenderName"  disable-output-escaping="yes" />


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

Может как то можно сначала собрать в переменную все FuelItem, а потом искать в них, тормозе как я понял из-за того что внутри FuelItem тоже куча элементов, и чтоб найти нужный FuelItem нужно прочитать кучу элементов, а кэширования типа нету. Из всего штук 5-10 в файле, а операций для которых они ищутся тысячи. Может можно как то запихать во временный словарь?
...
Рейтинг: 0 / 0
16.07.2013, 13:10
    #38332636
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.
<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
16.07.2013, 14:05
    #38332774
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
...
Рейтинг: 0 / 0
16.07.2013, 15:31
    #38333013
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.
Ура, сделал 
<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
16.07.2013, 16:02
    #38333087
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
Код: xml
1.
<xsl:stylesheet exclude-result-prefixes="msxsl" ...
...
Рейтинг: 0 / 0
16.07.2013, 16:31
    #38333125
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его
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
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml->xml xslt запрос значения атрибута по значению других атрибутов и использовать его / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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