powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / производительность XSLT
13 сообщений из 13, страница 1 из 1
производительность XSLT
    #39411022
sharkoff_new
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
В XSLT новичок
сделал XSLT для преобразований XML oracle bi publisher в XML workbook 2003 Excel


Но работает жутко медленно. не могли бы вы подсказать, что и где можно подкрутить?
Что интересно в XML Spy xslt отрабатывает быстрее чем на 4 процессорном сервере.
Есть ли в природе хорошие онлайн пособия по оптимизации 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.
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.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" 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:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.apps.xdo.template.rtf.XSLTFunctions" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
	<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">
			<ss:Styles>
				<ss:Style ss:ID="x1">
					<ss:Font ss:Color="black" ss:Size="10" ss:FontName="Arial"/>
				</ss:Style>
				<ss:Style ss:ID="xdo2">
					<ss:Font ss:Color="black" ss:Size="10" ss:FontName="Arial"/>
					<ss:NumberFormat Format="$#,##0;[Red]$#,##0" Bold="0"/>
				</ss:Style>
				<Style ss:ID="s3">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
					</Borders>
					<Font ss:FontName="Times New Roman" x:CharSet="204" x:Family="Roman" ss:Bold="1"/>
					<Interior ss:Color="#CCCCCC" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="Default" ss:Name="Normal">
					<Alignment ss:Vertical="Bottom"/>
					<Borders/>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
					<Interior/>
					<NumberFormat/>
					<Protection/>
				</Style>
				<Style ss:ID="s18" ss:Name="Акцент1">
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF"/>
					<Interior ss:Color="#5B9BD5" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s60" ss:Name="Процентный">
					<NumberFormat ss:Format="0%"/>
				</Style>
				<Style ss:ID="m151685352" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Bottom" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
				</Style>
				<Style ss:ID="s61">
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s62">
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#000000" ss:Bold="1"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s63">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#000000" ss:Bold="1"/>
					<Interior ss:Color="#A6A6A6" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Short Date"/>
				</Style>
				<Style ss:ID="s64">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="#,##0"/>
				</Style>
				<Style ss:ID="s111">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Fixed"/>
				</Style>
				<Style ss:ID="s65">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
					<Interior ss:Color="#A6A6A6" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s66">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s67" ss:Parent="s60">
					<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#00B050"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Percent"/>
				</Style>
				<Style ss:ID="s68">
					<Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#00B050"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s69">
					<Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFC000"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s70">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Interior/>
					<NumberFormat ss:Format="#,##0"/>
				</Style>
				<Style ss:ID="s71">
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FF0000"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s72">
					<Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#C00000"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s74">
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#00B050" ss:Bold="1"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Percent"/>
				</Style>
				<Style ss:ID="s75">
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#C00000" ss:Bold="1"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Percent"/>
				</Style>
				<Style ss:ID="s76" ss:Parent="s60">
					<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#00B050"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Percent"/>
				</Style>
				<Style ss:ID="s77">
					<Borders>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#00B050" ss:Bold="1"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Percent"/>
				</Style>
				<Style ss:ID="s78">
					<Borders>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#C00000" ss:Bold="1"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="Percent"/>
				</Style>
				<Style ss:ID="s79" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
					<NumberFormat ss:Format="#,##0"/>
				</Style>
				<Style ss:ID="s86" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
					<NumberFormat ss:Format="#,##0"/>
				</Style>
				<Style ss:ID="s87">
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FF0000"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s88">
					<Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFC000"/>
					<Interior/>
				</Style>
				<Style ss:ID="s89">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
					<NumberFormat ss:Format="0.0%"/>
				</Style>
				<Style ss:ID="s98" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
					<NumberFormat ss:Format="Short Date"/>
				</Style>
				<Style ss:ID="s99" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#C00000" ss:Bold="1"/>
					<NumberFormat ss:Format="Short Date"/>
				</Style>
				<Style ss:ID="s102" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
				</Style>
				<Style ss:ID="s104">
					<Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
					<Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
				</Style>
				<Style ss:ID="s105" ss:Parent="s18">
					<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
					<Borders>
						<Border ss:Position="Bottom" ss:LineStyle="Continuous"/>
						<Border ss:Position="Left" ss:LineStyle="Continuous"/>
						<Border ss:Position="Right" ss:LineStyle="Continuous"/>
						<Border ss:Position="Top" ss:LineStyle="Continuous"/>
					</Borders>
					<Font ss:FontName="Calibri" x:CharSet="204" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
					<NumberFormat ss:Format="Short Date"/>
				</Style>
				<Style ss:ID="s110">
					<Interior ss:Color="#FF6699" ss:Pattern="Solid"/>
				</Style>
			</ss:Styles>
			<!--   <xsl:apply-templates select="DATA_DS"/>-->
			<!--   </xsl:template>
   <xsl:template match="DATA_DS">-->
			<xsl:variable name="var_first_day" select="/DATA_DS/G_5/D_B"/>
			<xsl:for-each select="/DATA_DS/G_1">
				<xsl:variable name="var_camp" select="CAMPAIGN_ID"/>
				<Worksheet ss:Name="{./CAMP_NAME}">
					<Table ss:ExpandedRowCount="24" x:FullColumns="1" x:FullRows="1" ss:StyleID="s61" ss:DefaultRowHeight="15">
						<Column ss:StyleID="s61" ss:Width="24"/>
						<Column ss:StyleID="s61" ss:AutoFitWidth="0" ss:Width="312.75"/>
						<Column ss:StyleID="s61" ss:AutoFitWidth="0" ss:Width="53.25"/>
						<Column ss:StyleID="s61" ss:AutoFitWidth="0" ss:Width="105"/>
						<Column ss:StyleID="s61" ss:AutoFitWidth="0" ss:Width="53.25" ss:Span="4"/>
						<Column ss:Index="11" ss:StyleID="s61" ss:Width="109.5"/>
						<Column ss:StyleID="s61" ss:Width="90.75"/>
						<!--header begin-->
						<Row/>
						<Row/>
						<Row>
							<Cell ss:StyleID="s102" ss:MergeAcross="1">
								<Data ss:Type="String">Дата</Data>
							</Cell>
							<!--ss:MergeDown="1"-->
							<Cell ss:StyleID="s98">
								<Data ss:Type="String">Средний % за</Data>
							</Cell>
							<Cell ss:StyleID="s99">
								<Data ss:Type="String">MAX % за</Data>
							</Cell>
							<!-- заголовок - выводим даты-->
							<xsl:for-each select="/DATA_DS/G_3/D_D">
								<Cell ss:StyleID="s105" ss:MergeAcross="1">
									<Data ss:Type="String">
										<xsl:value-of select="."/>
									</Data>
								</Cell>
							</xsl:for-each>
						</Row>
						<Row>
							<Cell ss:StyleID="s65">
								<Data ss:Type="String">
								Код
								</Data>
							</Cell>
							<Cell ss:StyleID="s65">
								<Data ss:Type="String">
								Расшифровка
								</Data>
							</Cell>
							<Cell ss:StyleID="s63">
								<Data ss:Type="String">
								Средний % за
								</Data>
							</Cell>
							<Cell ss:StyleID="s63">
								<Data ss:Type="String">
								MAX % за
								</Data>
							</Cell>
							<!-- заголовок - выводим строки кол-во - Даты-->
							<xsl:for-each select="/DATA_DS/G_3/D_D">
								<Cell ss:StyleID="s63">
									<Data ss:Type="String">Кол-во</Data>
								</Cell>
								<Cell ss:StyleID="s63">
									<Data ss:Type="String">%</Data>
								</Cell>
							</xsl:for-each>
						</Row>
						<!--header end-->
						<xsl:for-each select="/DATA_DS/G_4">
							<!--по строкам-->
							<xsl:variable name="var_val" select="./VAL"/>
							<!--<xsl:for-each select="/DATA_DS/G_4/DIALER_STATUS_NAME"/>-->
							<xsl:variable name="var_status" select="./DIALER_STATUS_NAME"/>
							<!--<xsl:variable name="var_val" select="VAL"/>-->
							<Row>
								<!--Левые статич колонки-->
								<Cell ss:StyleID="s66">
									<Data ss:Type="Number">
										<xsl:value-of select="$var_val"/>
									</Data>
								</Cell>
								<Cell ss:StyleID="x1">
									<Data ss:Type="String">
										<xsl:value-of select="$var_status"/>
									</Data>
								</Cell>
								<!--Begin Итоговые средние и максимальное-->
								<Cell ss:StyleID="s111">
									<Data ss:Type="Number">
										<xsl:value-of select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_first_day and CAMPAIGN_ID=$var_camp]/AVG_PRC"/>
									</Data>
								</Cell>
								<Cell ss:StyleID="s111">
									<Data ss:Type="Number">
										<xsl:value-of select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_first_day and CAMPAIGN_ID=$var_camp]/MAX_PRC"/>
									</Data>
								</Cell>
								<!--End Итоговые средние и максимальное-->
								<!--Левые статич колонки-->
								<!--Begin выводим основные данные-->
								<xsl:for-each select="/DATA_DS/G_3/D_D">
									<!--побежали по датам-->
									<xsl:variable name="var_dd" select="."/>
									<Cell ss:StyleID="s64">
										<Data ss:Type="Number">
											<!--		<xsl:value-of select="$var_camp"/>
										 val
											<xsl:value-of select="$var_val"/>
											rrrr
											<xsl:value-of select="$var_dd"/>
											cnt=-->
											<xsl:value-of select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_dd and CAMPAIGN_ID=$var_camp]/CNT"/>
										</Data>
									</Cell>
									<!--подкраска здесь-->
									<xsl:variable name="var_is_color" select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_dd and CAMPAIGN_ID=$var_camp]/IS_COLOR"/>
									<xsl:variable name="CrStl">
										<xsl:choose>
											<xsl:when test="$var_is_color=0">
												<xsl:value-of select="'s111'"/>
											</xsl:when>
											<xsl:otherwise>
												<xsl:value-of select="'s110'"/>
											</xsl:otherwise>
										</xsl:choose>
									</xsl:variable>
									<!--выводим значение суммы в текущем разрезе учетного и расчетного периода -->
									<Cell ss:StyleID="{$CrStl}">
										<Data ss:Type="Number">
											<xsl:value-of select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_dd and CAMPAIGN_ID=$var_camp]/PRC"/>
										</Data>
									</Cell>
								</xsl:for-each>
								<!--End выводим основные данные-->
							</Row>
						</xsl:for-each>
						<Row ss:StyleID="s62">
							<!--Begin нижняя строка итога-->
							<Cell ss:StyleID="s102" ss:MergeAcross="1">
								<Data ss:Type="String">Итого</Data>
							</Cell>
							<Cell ss:StyleID="s102">
								<Data ss:Type="String">
								</Data>
							</Cell>
							<Cell ss:StyleID="s102">
								<Data ss:Type="String">
								</Data>
							</Cell>
							<xsl:for-each select="/DATA_DS/G_3/D_D">
								<xsl:variable name="var_n_dd" select="."/>
								<!--побежали по датам-->
								<Cell ss:StyleID="s79">
									<Data ss:Type="Number">
										<xsl:value-of select="/DATA_DS/G_1/G_2[ORD=1 and D_D_CHAR = $var_n_dd and CAMPAIGN_ID=$var_camp]/SUM_CNT"/>
									</Data>
								</Cell>
								<Cell ss:StyleID="s79">
									<Data ss:Type="Number">
									</Data>
								</Cell>
							</xsl:for-each>
							<!--End нижняя строка итога-->
						</Row>
					</Table>
					<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
						<PageSetup>
							<Header x:Margin="0.3"/>
							<Footer x:Margin="0.3"/>
							<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
						</PageSetup>
						<Print>
							<ValidPrinterInfo/>
							<HorizontalResolution>600</HorizontalResolution>
							<VerticalResolution>600</VerticalResolution>
						</Print>
						<Selected/>
						<FreezePanes/>
						<FrozenNoSplit/>
						<SplitVertical>2</SplitVertical>
						<LeftColumnRightPane>2</LeftColumnRightPane>
						<ActivePane>1</ActivePane>
						<Panes>
							<Pane>
								<Number>3</Number>
							</Pane>
							<Pane>
								<Number>1</Number>
								<ActiveRow>14</ActiveRow>
								<ActiveCol>1</ActiveCol>
							</Pane>
						</Panes>
						<ProtectObjects>False</ProtectObjects>
						<ProtectScenarios>False</ProtectScenarios>
					</WorksheetOptions>
				</Worksheet>
			</xsl:for-each>
		</Workbook>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
производительность XSLT
    #39411086
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть, мой ответ покажется слишком общим или даже глупым. Тем не менее.
Я однажды разбирал тяжелую схему XSLT. Ее тяжесть заключалась в чрезмерном увлечении циклами. Дело в том, что движок XSLT сам обходит обрабатываемый XML-документ и применяет ко всем его элементам описанные в шаблоне преобразования. Но некоторые разработчики пытаются обходить узлы с помощью циклов, действуя по аналогии с обыкновенным языками программирования. Тем самым, порождая многократные проходы по одним и тем же данным.
...
Рейтинг: 0 / 0
производительность XSLT
    #39411142
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sharkoff_new,

Вот это
Код: xml
1.
<xsl:value-of select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_first_day and CAMPAIGN_ID=$var_camp]/AVG_PRC"/>


переписывается так
Код: xml
1.
2.
<xsl:variable name="$node" select="/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_first_day and CAMPAIGN_ID=$var_camp]"/>
<xsl:value-of select="$node/AVG_PRC"/>


Причем $node вычисляется один раз за итерацию для всех полей.

Аналогично для других выборок
...
Рейтинг: 0 / 0
производительность XSLT
    #39411336
sharkoff_new
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,
Спасибо!
...
Рейтинг: 0 / 0
производительность XSLT
    #39411377
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sharkoff_new,

ты не используешь шаблонные правила....а вся прелесть в них...поэтому всё что в циклах for-each - желательно выносить в отдельный шаблон, и тогда можно говорить о производительности...попробуй переписать преобразование и по шаблонам разнести всё что можно....что такое applay-templates я думаю что тебе знакомо....но судя покоду какая то программа делала код...
...
Рейтинг: 0 / 0
производительность XSLT
    #39411556
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фридрих.поэтому всё что в циклах for-each - желательно выносить в отдельный шаблон,Есть ссылка на тесты где сказано, что for-each уступает в производительности apply-templates? По логике должно быть как раз наоборот, т.к. выборка узлов производится одна и та же, но в for-each не нужно для каждого узла искать подходящий шаблон
...
Рейтинг: 0 / 0
производительность XSLT
    #39411797
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

ошибался я...если верить вот этому
https://github.com/pasaran/xslt-speed-test/tree/master/for-each-vs-apply-templates
...
Рейтинг: 0 / 0
производительность XSLT
    #39412112
sharkoff_new
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за замечания и рекомендации
Столкнулся с такой проблемой что запуская локально преобразования на одном и том же наборе данных
1. У себя локально через XML Spy (2 процессорный середнячковая машинка)
2. На сервер BI Publisher (сервер 16 процессорный), здесь выполняется запрос к БД но он секундный и большого оверхеда быть не может.

Я получаю совершенно разное время работы, локально 2 минуты , на сервере 10 минут.
Как такое может быть ?
Может быть кто то сталкивался..
...
Рейтинг: 0 / 0
производительность XSLT
    #39412470
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sharkoff_new, локально 2 минуты , на сервере 10 минут.Разные трансформеры - разная производительность
...
Рейтинг: 0 / 0
производительность XSLT
    #39412899
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sharkoff_new,

а что за файл у тебя - который ты преобразовываешь? сколько весит сам файл?
если файл огромный то может на xquery будет быстрей....и вообще ты для сервера деалешь или локально будешь преобразовывать? есть много хороших инструментов которые быстро работают...
...
Рейтинг: 0 / 0
производительность XSLT
    #39412909
sharkoff_new
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фридрих,

Данные выдает Oracle Publisher , количество данных зависит от параметров отчета.
Механизм такой Oracle Publisher делает запросы в БД выдает XML документ. Используя XSLT шаблон (по которому действует Publisher) эти данные трансформируются в XML Workbook 2003.
Какой он там движок для XSL трансформации он использует. Неизвестно. Но видно что как то не очень эффективно. Попробую обратится в Oracle Support
...
Рейтинг: 0 / 0
производительность XSLT
    #39431599
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sharkoff_new,

я подтверждаю, что разные xslt-процессоры могут различаться по производительности в несколько раз. Так что наверняка дело в используемых движках.
...
Рейтинг: 0 / 0
производительность XSLT
    #39431735
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. XML Publisher сделан на Java. Т.ч. время не единственный показатель. Я бы посмотрел, достаточно ли памяти в JVM. У Вас все же не огромные, а ОЧЕНЬ ОГРОМНЫЕ документы - т.ч. возможно память на пределе и банально работает GC.

2. Если я правильно помню, раньше XML Publisher использовал для трансформации DOM. Т.е. был жуткий оверхиад по памяти, ну и см. выше.

3. Очень странна потребность обрабатывать такие объемы данных в ОТЧЕТАХ. Вполне возможно, что в исходных XML-файлах много лишнего. Данные нужно фильтровать SELECT'ами, а не XML выражениями. IMHO & AFAIK.

Структуру Ваших данных не знаю, но данные нужно готовить для отчета, а не коне-сферически-вакуумно, т.ч. лично я бы, всю порнографию вида:
"/DATA_DS/G_1/G_2[VAL = $var_val and D_D_CHAR = $var_first_day and CAMPAIGN_ID=$var_camp]/AVG_PRC"
подтащил бы SELECT'ами и просто записать в блоки G_3 и G_4.

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


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