powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Оптимизация XSLT
13 сообщений из 13, страница 1 из 1
Оптимизация XSLT
    #38762031
khSerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья! Прошу Вашей помощи!
Есть шаблон XSLT, который как не странно преобразовывает XML в Exсel документ:) но делает это очень долго :(
помогите его оптимизировать!
В какую сторону мне копать...

Конструкция преобразования элементарная, обычный when, я прохожу по 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.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
<xsl:template mode="r" match="Report5" name="r">
    <xsl:param name="i" select="position()"/>
    <xsl:choose>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по субъекту Российской Федерации:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="RFResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по лесничеству:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="LesResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по лесопользователю:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="ArendResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Защитные'">
        <xsl:apply-templates select="//Report5[$i]" mode="za" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Эксплуатационные'">
        <xsl:apply-templates select="//Report5[$i]" mode="eks" />
      </xsl:when>
      <xsl:otherwise>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

<xsl:template mode="RFResultat" match="Report5" name="RFResultat">
    <Row ss:AutoFitHeight="0" ss:Height="15.75" ss:StyleID="s133">
      <Cell ss:StyleID="s144">
        <Data ss:Type="String">Итого по субъекту Российской Федерации:</Data>
        <NamedCell
      ss:Name="_FilterDatabase"/>
        <NamedCell ss:Name="Print_Area"/>
        <NamedCell
      ss:Name="Print_Titles"/>
      </Cell>
      <Cell ss:StyleID="s144">
        <Data ss:Type="String">Всего</Data>
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell ss:Name="Print_Area"/>
      </Cell>
      <Cell ss:StyleID="s171">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ПОЛЬЗОВАТЕЛЬ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s171">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ВИД_РУБКИ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="УЧ_ЛЕСНИЧЕСТВО" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="УРОЧИЩЕ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="КВ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ВЫДЕЛА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ЛЕСОСЕКА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ПЛ_ЭКСПЛ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ПЛ_ФАКТ_РУБКИ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕСОБЛ_ПРЕД_ПАРАМ_ШТ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕСООТВ_ЭКС_ПЛ_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕСООТВ_ЭКС_ПЛ_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="БЕЗ_РАЗРЕШ_ДОК_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="БЕЗ_РАЗРЕШ_ДОК_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗА_ПРЕДЕЛ_ОТВОДА_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗА_ПРЕДЕЛ_ОТВОДА_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕЭКСПЛ_УЧ_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕЭКСПЛ_УЧ_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗАЩИТН_ВСЕГО_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗАЩИТН_ВСЕГО_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ВОДООХРАН_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ВОДООХРАН_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ИТОГО_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ИТОГО_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="УЩЕРБ" />
        </Data>
      </Cell>
    </Row>
  </xsl:template>


и т.д.

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.
25.
26.
27.
28.
29.
30.
31.
<Report5>
<КОД>24_##_###_##_####_##_[0]</КОД>
<КОД_СУБЪЕКТА>24</КОД_СУБЪЕКТА>
<НАИМЕНОВАНИЕ>Всего по субъекту Российской Федерации:</НАИМЕНОВАНИЕ>
<ВИД_ЦЕЛЕВ_НАЗНАЧ>Всего</ВИД_ЦЕЛЕВ_НАЗНАЧ>
<ПОЛЬЗОВАТЕЛЬ></ПОЛЬЗОВАТЕЛЬ>
<ВИД_РУБКИ></ВИД_РУБКИ>
<УЧ_ЛЕСНИЧЕСТВО></УЧ_ЛЕСНИЧЕСТВО>
<УРОЧИЩЕ></УРОЧИЩЕ>
<КВ></КВ>
<ВЫДЕЛА></ВЫДЕЛА>
<ЛЕСОСЕКА></ЛЕСОСЕКА>
<ПЛ_ЭКСПЛ>33923.5</ПЛ_ЭКСПЛ>
<ПЛ_ФАКТ_РУБКИ>17557.3</ПЛ_ФАКТ_РУБКИ>
<НЕСОБЛ_ПРЕД_ПАРАМ_ШТ>5</НЕСОБЛ_ПРЕД_ПАРАМ_ШТ>
<НЕСООТВ_ЭКС_ПЛ_ГА>8.1</НЕСООТВ_ЭКС_ПЛ_ГА>
<НЕСООТВ_ЭКС_ПЛ_М3>1670.0</НЕСООТВ_ЭКС_ПЛ_М3>
<БЕЗ_РАЗРЕШ_ДОК_ГА>0.4</БЕЗ_РАЗРЕШ_ДОК_ГА>
<БЕЗ_РАЗРЕШ_ДОК_М3>76.0</БЕЗ_РАЗРЕШ_ДОК_М3>
<ЗА_ПРЕДЕЛ_ОТВОДА_ГА>16.9</ЗА_ПРЕДЕЛ_ОТВОДА_ГА>
<ЗА_ПРЕДЕЛ_ОТВОДА_М3>3178.0</ЗА_ПРЕДЕЛ_ОТВОДА_М3>
<НЕЭКСПЛ_УЧ_ГА>20.0</НЕЭКСПЛ_УЧ_ГА>
<НЕЭКСПЛ_УЧ_М3>3006.0</НЕЭКСПЛ_УЧ_М3>
<ЗАЩИТН_ВСЕГО_ГА>3.4</ЗАЩИТН_ВСЕГО_ГА>
<ЗАЩИТН_ВСЕГО_М3>676.0</ЗАЩИТН_ВСЕГО_М3>
<ВОДООХРАН_ГА>2.4</ВОДООХРАН_ГА>
<ВОДООХРАН_М3>436.0</ВОДООХРАН_М3>
<ИТОГО_ГА>48.8</ИТОГО_ГА>
<ИТОГО_М3>8606.0</ИТОГО_М3>
<УЩЕРБ>38074.0</УЩЕРБ>
</Report5>


и т.д. в той же структуре
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762188
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дичь какая. За //Report5 можно сразу оставлять без обеда. Всю неделю.

В <xsl:template mode="r" match="Report5" name="r"> каким образом попадаем?
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762250
khSerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, вот поэтому и не ем, а пытаюсь освоить xslt :)

а что не так с "//Report5"?

В
Код: xml
1.
<xsl:template mode="r" match="Report5" name="r">

попадаю так

Код: xml
1.
<xsl:apply-templates select="//Report5" mode="r" />
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762266
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khSergа что не так с "//Report5"?// написанные в начале пути означают поиск везде. даже в УРОЧИЩЕ. и таких глобальных поисков по паре десятков на каждый Report5. замена // на /

khSergпопадаю така из откуда? хотелось бы увидеть стек вызовов шаблонов с начала построения списка. экселевские теги не нужны.
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762269
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyзамена // на /это обрывок мысли, игнорировать
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762288
khSerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariykhSergа что не так с "//Report5"?// написанные в начале пути означают поиск везде. даже в УРОЧИЩЕ. и таких глобальных поисков по паре десятков на каждый Report5. замена // на /

khSergпопадаю така из откуда? хотелось бы увидеть стек вызовов шаблонов с начала построения списка. экселевские теги не нужны.

Я вызываю шаблон один раз, методом как я писал выше, он находится между экселевскими тегами. И уже в

Код: xml
1.
<xsl:template mode="r" match="Report5" name="r">

он перераспределяет что как форматировать.
Возможно моя конструкция шаблона неправильная?
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762338
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khSergЯ вызываю шаблон один раз, методом как я писал выше, он находится между экселевскими тегами. а экселевские теги где находятся? в template, все это хозяйство содержащем, что написано?

khSergВозможно моя конструкция шаблона неправильная?именно. а чтобы сделать ее правильной, нужна информация, которую я пытаюсь выяснить.
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762438
khSerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyа экселевские теги где находятся? в template, все это хозяйство содержащем, что написано?

экселевские теги находятся в общем шаблоне xslt, приложил файл целиком для наглядности!

Antonariyименно. а чтобы сделать ее правильной, нужна информация, которую я пытаюсь выяснить.
все что нужно с удовольствием предоставлю.
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762449
khSerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

если упростить то общая структура шаблона такая...

Код: 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.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<xsl:stylesheet version="1.0"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns="urn:schemas-microsoft-com:office:spreadsheet"
				xmlns:o="urn:schemas-microsoft-com:office:office"
				xmlns:x="urn:schemas-microsoft-com:office:excel"
				xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
  <xsl:template match="/">
    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Excel.Sheet"</xsl:text>
    </xsl:processing-instruction>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Created>2014-09-29T11:44:40Z</Created>
  <Version>15.00</Version>
 </DocumentProperties>
 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  <AllowPNG/>
 </OfficeDocumentSettings>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>11445</WindowHeight>
  <WindowWidth>21780</WindowWidth>
  <WindowTopX>0</WindowTopX>
  <WindowTopY>0</WindowTopY>
  <Calculation>ManualCalculation</Calculation>
  <DoNotCalculateBeforeSave/>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
  <Uncalced/>
 </ExcelWorkbook>

***

<Row ss:AutoFitHeight="0" ss:Height="15" ss:StyleID="s133">
    <Cell ss:MergeAcross="26" ss:StyleID="s131"><Data ss:Type="String">2013 год и 2014 год I квартал</Data><NamedCell
      ss:Name="_FilterDatabase"/><NamedCell ss:Name="Print_Area"/><NamedCell
      ss:Name="Print_Titles"/></Cell>
 </Row>

<xsl:apply-templates select="//Report5" mode="r" />

***

</DataValidation>
 </Worksheet>
</Workbook>
  </xsl:template>

  <xsl:template mode="r" match="Report5" name="r">
    <xsl:param name="i" select="position()"/>
    <xsl:choose>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по субъекту Российской Федерации:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="RFResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по лесничеству:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="LesResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по лесопользователю:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="ArendResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Защитные'">
        <xsl:apply-templates select="//Report5[$i]" mode="za" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Эксплуатационные'">
        <xsl:apply-templates select="//Report5[$i]" mode="eks" />
      </xsl:when>
      <xsl:otherwise>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template mode="RFResultat" match="Report5" name="RFResultat">
    <Row ss:AutoFitHeight="0" ss:Height="15.75" ss:StyleID="s133">
      <Cell ss:StyleID="s144">
        <Data ss:Type="String">Итого по субъекту Российской Федерации:</Data>
        <NamedCell
      ss:Name="_FilterDatabase"/>
        <NamedCell ss:Name="Print_Area"/>
        <NamedCell
      ss:Name="Print_Titles"/>
      </Cell>
      <Cell ss:StyleID="s144">
        <Data ss:Type="String">Всего</Data>
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell ss:Name="Print_Area"/>
      </Cell>
      <Cell ss:StyleID="s171">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ПОЛЬЗОВАТЕЛЬ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s171">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ВИД_РУБКИ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="УЧ_ЛЕСНИЧЕСТВО" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="УРОЧИЩЕ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="КВ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ВЫДЕЛА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="String">
          <xsl:value-of select="ЛЕСОСЕКА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ПЛ_ЭКСПЛ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ПЛ_ФАКТ_РУБКИ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s172">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕСОБЛ_ПРЕД_ПАРАМ_ШТ" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕСООТВ_ЭКС_ПЛ_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕСООТВ_ЭКС_ПЛ_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="БЕЗ_РАЗРЕШ_ДОК_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="БЕЗ_РАЗРЕШ_ДОК_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗА_ПРЕДЕЛ_ОТВОДА_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗА_ПРЕДЕЛ_ОТВОДА_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s145">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕЭКСПЛ_УЧ_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="НЕЭКСПЛ_УЧ_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗАЩИТН_ВСЕГО_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ЗАЩИТН_ВСЕГО_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ВОДООХРАН_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ВОДООХРАН_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ИТОГО_ГА" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="ИТОГО_М3" />
        </Data>
      </Cell>
      <Cell ss:StyleID="s144">
        <NamedCell ss:Name="_FilterDatabase"/>
        <NamedCell
      ss:Name="Print_Area"/>
        <Data ss:Type="Number">
          <xsl:value-of select="УЩЕРБ" />
        </Data>
      </Cell>
    </Row>
  </xsl:template>

***
дальнейшие темлейты по подобию
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762535
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этоkhSerg
Код: xml
1.
<xsl:apply-templates select="//Report5" mode="r" />

заменить на
Код: xml
1.
<xsl:apply-templates select="Report5" mode="r" />

если Report5 - не дочерний узел, то явно указать полный путь к узлу

Вот это дикую порнографию
khSerg
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<xsl:template mode="r" match="Report5" name="r">
    <xsl:param name="i" select="position()"/>
    <xsl:choose>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по субъекту Российской Федерации:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="RFResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по лесничеству:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="LesResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/НАИМЕНОВАНИЕ = 'Всего по лесопользователю:' and //Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:apply-templates select="//Report5[$i]" mode="ArendResultat" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Защитные'">
        <xsl:apply-templates select="//Report5[$i]" mode="za" />
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Эксплуатационные'">
        <xsl:apply-templates select="//Report5[$i]" mode="eks" />
      </xsl:when>
      <xsl:otherwise>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

Заменить на
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<xsl:template mode="r" match="Report5" name="r">
    <xsl:choose>
      <xsl:when test="ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Всего'">
        <xsl:choose>
          <xsl:when test="НАИМЕНОВАНИЕ = 'Всего по субъекту Российской Федерации:'>
            <xsl:apply-templates select="." mode="RFResultat" />
          </xsl:when>
          <xsl:when test="НАИМЕНОВАНИЕ = 'Всего по лесничеству:'>
            <xsl:apply-templates select="." mode="LesResultat" />
          </xsl:when>
          <xsl:when test="НАИМЕНОВАНИЕ = 'Всего по лесопользователю:'>
            <xsl:apply-templates select="." mode="ArendResultat" />
          </xsl:when>
        </xsl:choose>
      </xsl:when>
      <xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Защитные'">
        <xsl:apply-templates select="." mode="za" />
      </xsl:when>
      <xsl:when test="ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Эксплуатационные'">
        <xsl:apply-templates select="." mode="eks" />
      </xsl:when>
    </xsl:choose>
  </xsl:template>

...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762538
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: xml
1.
2.
3.
<xsl:when test="//Report5[$i]/ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Защитные'">
  <xsl:apply-templates select="." mode="za" />
</xsl:when>

читать как
Код: xml
1.
2.
3.
<xsl:when test="ВИД_ЦЕЛЕВ_НАЗНАЧ = 'Защитные'">
  <xsl:apply-templates select="." mode="za" />
</xsl:when>
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38762881
khSerg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
Большое спасибо, время обработки сократилось на 2 порядка!!!
Надо изучать мат.часть :)
Насколько я понимаю, если на входе идет род. элемент
Код: xml
1.
"//Report5[$i]/НАИМЕНОВАНИЕ..."

то уточнять его позицию в дереве не надо.
И
Код: xml
1.
"."

определяет элементы текущего узла.
Всё так?
...
Рейтинг: 0 / 0
Оптимизация XSLT
    #38763104
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
khSerg Насколько я понимаю, если на входе идет род. элементНа вход идет коллекция узлов, определяемая xpath-выражением в xsl:apply-templates select=""

xsl:template match="Report5" вызывается для каждого узла Report5, имеющимся в коллекции.

khSerg И "." определяет элементы текущего узла. Элементы текущего узла это *, точка это сам текущий узел.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Оптимизация XSLT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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