Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT помогите ПЛИЗ!!! готов заплатить! / 5 сообщений из 5, страница 1 из 1
18.02.2010, 00:08
    #36476408
nons111ww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT помогите ПЛИЗ!!! готов заплатить!
Привет ВСЕМ! Если кто поможет, готов заплатить 20$
Мне нужно сделать преобразование из XML в HTML. одну часть я сделал, но осталась фича, которая все никак не получается

Смысл в том, что есть:
1. sectors
2. subsectors
3. items

каждый item нужно отрисовать под опр subsector'ом, который должен относиться к опр сектору. т е как то так (там в data.xml все понятно. по сути категория и подкатегория. items знают о том к чему они относятся из своих атрибутов):
****************
Sector 1
****************
Subsector 1
++++++++++++++++
ID Value
----------------
id1 value1
...
idN valueN
----------------
Subsector 2
++++++++++++++++
ID Value
----------------
id1 value1
...
idN valueN
...
****************
Sector 2
****************
Subsector 1
++++++++++++++++
ID Value
----------------
id1 value1
...
idN valueN
----------------
Subsector 2
++++++++++++++++
ID Value
----------------
id1 value1
...
idN valueN
...

все это я сделал =). НО
subsectors нужно разбить как бы "по страницам". т е нужно чтобы ...скажем "<hr />" отрисовывался в тех местах, где будет это мнимый переход на след страницу, но "<hr />" не может стоять в середине subsector'а. только между ними. Не знаю как это организовать.

XML на вход:
Код: plaintext
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.
<?xml version="1.0" encoding="iso-8859-1" ?>
<data>
	<item id="i1"	sector="s1"	subsector="u1"> 561 </item>
	<item id="i10"	sector="s3"	subsector="u4"> 15 </item>
	<item id="i22"	sector="s2"	subsector="u2"> 1234 </item>
	<item id="i11"	sector="s1"	subsector="u2"> 123 </item>
	<item id="i17"	sector="s1"	subsector="u3"> 165 </item>
	<item id="i61"	sector="s2"	subsector="u1"> 346 </item>
	<item id="i12"	sector="s2"	subsector="u5"> 3425 </item>
	<item id="i2"	sector="s3"	subsector="u4"> 78 </item>
	<item id="i14"	sector="s3"	subsector="u4"> 51 </item>
	<item id="i21"	sector="s1"	subsector="u5"> 346 </item>
	<item id="i39"	sector="s3"	subsector="u2"> 463 </item>
	<item id="i44"	sector="s2"	subsector="u3"> 151 </item>
	<item id="i89"	sector="s1"	subsector="u1"> 451 </item>
	<item id="i81"	sector="s2"	subsector="u4"> 771 </item>
	<item id="i36"	sector="s2"	subsector="u5"> 5654 </item>
	<item id="i27"	sector="s3"	subsector="u3"> 362 </item>
	<item id="i15"	sector="s1"	subsector="u5"> 234 </item>
	<item id="i18"	sector="s3"	subsector="u2"> 73 </item>
	<item id="i51"	sector="s3"	subsector="u5"> 567 </item>
	<item id="i26"	sector="s1"	subsector="u4"> 17 </item>
	<item id="i95"	sector="s3"	subsector="u5"> 67489 </item>
	<item id="i13"	sector="s1"	subsector="u3"> 54 </item>
	<item id="i71"	sector="s1"	subsector="u3"> 2 </item>
	<item id="i23"	sector="s2"	subsector="u1"> 345 </item>
	<item id="i7"	sector="s2"	subsector="u1"> 67 </item>
	<item id="i80"	sector="s1"	subsector="u3"> 7754 </item>
	<item id="i9"	sector="s3"	subsector="u4"> 343 </item>
	<item id="i4"	sector="s1"	subsector="u2"> 51 </item>
	<item id="i99"	sector="s3"	subsector="u5"> 5637 </item>
	<item id="i16"	sector="s1"	subsector="u5"> 716 </item>
	<item id="i85"	sector="s2"	subsector="u1"> 4561 </item>
	<item id="i73"	sector="s1"	subsector="u3"> 46 </item>
	<item id="i48"	sector="s2"	subsector="u1"> 82 </item>
	<item id="i20"	sector="s2"	subsector="u2"> 5461 </item>
	<item id="i66"	sector="s1"	subsector="u1"> 4526 </item>
	<item id="i52"	sector="s3"	subsector="u5"> 73 </item>
	<item id="i64"	sector="s3"	subsector="u4"> 56 </item>
	<item id="i54"	sector="s2"	subsector="u4"> 827 </item>
	<item id="i19"	sector="s2"	subsector="u4"> 1634 </item>
	<item id="i25"	sector="s3"	subsector="u3"> 546 </item>
	<item id="i50"	sector="s1"	subsector="u2"> 61 </item>
	<item id="i63"	sector="s2"	subsector="u3"> 611 </item>
	<item id="i42"	sector="s2"	subsector="u4"> 36 </item>
	<item id="i67"	sector="s1"	subsector="u2"> 61 </item>
	<item id="i98"	sector="s1"	subsector="u1"> 541 </item>
	<item id="i76"	sector="s1"	subsector="u5"> 61 </item>
	<item id="i62"	sector="s3"	subsector="u5"> 146 </item>
	<item id="i68"	sector="s2"	subsector="u1"> 346 </item>
	<item id="i82"	sector="s1"	subsector="u5"> 15 </item>
	<item id="i83"	sector="s2"	subsector="u5"> 43 </item>
	<item id="i3"	sector="s3"	subsector="u5"> 345 </item>
	<item id="i6"	sector="s1"	subsector="u5"> 134 </item>
	<item id="i30"	sector="s1"	subsector="u4"> 15 </item>
	<item id="i100"	sector="s2"	subsector="u2"> 27 </item>
	<item id="i101"	sector="s1"	subsector="u3"> 293 </item>
	<item id="i102"	sector="s4"	subsector="u4"> 282 </item>
	<item id="i103"	sector="s3"	subsector="u2"> 389 </item>
	<item id="i104"	sector="s2"	subsector="u3"> 289 </item>
	<item id="i105"	sector="s3"	subsector="u5"> 754 </item>
	<item id="i106"	sector="s2"	subsector="u2"> 617 </item>
	<item id="i107"	sector="s3"	subsector="u2"> 859 </item>
	<item id="i108"	sector="s2"	subsector="u1"> 809 </item>
	<item id="i109"	sector="s2"	subsector="u2"> 15 </item>
	<item id="i110"	sector="s2"	subsector="u6"> 394 </item>
	<item id="i111"	sector="s1"	subsector="u3"> 855 </item>
	<item id="i112"	sector="s2"	subsector="u1"> 693 </item>
	<item id="i113"	sector="s3"	subsector="u4"> 900 </item>
	<item id="i114"	sector="s1"	subsector="u5"> 652 </item>
	<item id="i115"	sector="s1"	subsector="u4"> 55 </item>
	<item id="i116"	sector="s1"	subsector="u6"> 907 </item>
	<item id="i117"	sector="s2"	subsector="u2"> 699 </item>
	<item id="i118"	sector="s2"	subsector="u5"> 404 </item>
	<item id="i119"	sector="s4"	subsector="u6"> 284 </item>
	<item id="i120"	sector="s4"	subsector="u4"> 857 </item>
	<item id="i121"	sector="s3"	subsector="u3"> 145 </item>
	<item id="i122"	sector="s3"	subsector="u4"> 645 </item>
	<item id="i123"	sector="s1"	subsector="u4"> 777 </item>
	<item id="i124"	sector="s1"	subsector="u3"> 87 </item>
	<item id="i125"	sector="s3"	subsector="u2"> 586 </item>
	<item id="i126"	sector="s1"	subsector="u3"> 452 </item>
	<item id="i127"	sector="s2"	subsector="u2"> 983 </item>
	<item id="i128"	sector="s2"	subsector="u4"> 72 </item>
	<item id="i129"	sector="s2"	subsector="u6"> 260 </item>
	<item id="i130"	sector="s2"	subsector="u4"> 155 </item>
	<item id="i131"	sector="s3"	subsector="u4"> 705 </item>
	<item id="i132"	sector="s1"	subsector="u1"> 788 </item>
	<item id="i133"	sector="s3"	subsector="u1"> 590 </item>
	<item id="i134"	sector="s3"	subsector="u5"> 259 </item>
	<item id="i135"	sector="s2"	subsector="u5"> 502 </item>
	<item id="i136"	sector="s3"	subsector="u4"> 654 </item>
	<item id="i137"	sector="s3"	subsector="u6"> 950 </item>
	<item id="i138"	sector="s4"	subsector="u6"> 210 </item>
	<item id="i139"	sector="s2"	subsector="u4"> 424 </item>
	<item id="i140"	sector="s1"	subsector="u5"> 618 </item>
	<item id="i141"	sector="s4"	subsector="u4"> 317 </item>
	<item id="i142"	sector="s2"	subsector="u5"> 223 </item>
	<item id="i143"	sector="s1"	subsector="u5"> 240 </item>
	<item id="i144"	sector="s1"	subsector="u2"> 479 </item>
	<item id="i145"	sector="s2"	subsector="u4"> 695 </item>
	<item id="i146"	sector="s3"	subsector="u3"> 231 </item>
	<item id="i147"	sector="s2"	subsector="u4"> 352 </item>
	<item id="i148"	sector="s4"	subsector="u3"> 164 </item>
	<item id="i149"	sector="s3"	subsector="u2"> 92 </item>
	<item id="i150"	sector="s4"	subsector="u6"> 604 </item>
	<item id="i151"	sector="s1"	subsector="u6"> 655 </item>
	<item id="i152"	sector="s3"	subsector="u6"> 451 </item>
	<item id="i153"	sector="s3"	subsector="u5"> 238 </item>
	<item id="i154"	sector="s3"	subsector="u2"> 551 </item>
	<item id="i155"	sector="s4"	subsector="u1"> 571 </item>
	<item id="i156"	sector="s4"	subsector="u4"> 657 </item>
	<item id="i157"	sector="s4"	subsector="u6"> 84 </item>
	<item id="i158"	sector="s2"	subsector="u4"> 137 </item>
	<item id="i159"	sector="s2"	subsector="u3"> 464 </item>
	<item id="i160"	sector="s1"	subsector="u2"> 69 </item>
	<item id="i161"	sector="s4"	subsector="u2"> 431 </item>
	<item id="i162"	sector="s3"	subsector="u5"> 550 </item>
	<item id="i163"	sector="s4"	subsector="u1"> 573 </item>
	<item id="i164"	sector="s1"	subsector="u4"> 307 </item>
	<item id="i165"	sector="s2"	subsector="u3"> 867 </item>
	<item id="i166"	sector="s3"	subsector="u4"> 733 </item>
	<item id="i167"	sector="s3"	subsector="u4"> 508 </item>
	<item id="i168"	sector="s1"	subsector="u5"> 546 </item>
	<item id="i169"	sector="s4"	subsector="u4"> 406 </item>
	<item id="i170"	sector="s1"	subsector="u3"> 618 </item>
	<item id="i171"	sector="s3"	subsector="u3"> 215 </item>
	<item id="i172"	sector="s1"	subsector="u4"> 365 </item>
	<item id="i173"	sector="s3"	subsector="u5"> 4 </item>
	<item id="i174"	sector="s3"	subsector="u4"> 99 </item>
	<item id="i175"	sector="s2"	subsector="u2"> 173 </item>
	<item id="i176"	sector="s3"	subsector="u4"> 145 </item>
	<item id="i177"	sector="s2"	subsector="u5"> 286 </item>
	<item id="i178"	sector="s4"	subsector="u5"> 477 </item>
	<item id="i179"	sector="s1"	subsector="u2"> 388 </item>
	<item id="i180"	sector="s4"	subsector="u5"> 231 </item>
	<item id="i181"	sector="s3"	subsector="u4"> 506 </item>
	<item id="i182"	sector="s3"	subsector="u6"> 430 </item>
	<item id="i183"	sector="s1"	subsector="u5"> 513 </item>
	<item id="i184"	sector="s2"	subsector="u5"> 684 </item>
	<item id="i185"	sector="s2"	subsector="u2"> 908 </item>
	<item id="i186"	sector="s2"	subsector="u2"> 582 </item>
	<item id="i187"	sector="s4"	subsector="u3"> 203 </item>
	<item id="i188"	sector="s3"	subsector="u2"> 142 </item>
	<item id="i189"	sector="s3"	subsector="u4"> 238 </item>
	<item id="i190"	sector="s3"	subsector="u2"> 527 </item>
	<item id="i191"	sector="s2"	subsector="u2"> 492 </item>
	<item id="i192"	sector="s2"	subsector="u1"> 379 </item>
	<item id="i193"	sector="s2"	subsector="u3"> 256 </item>
	<item id="i194"	sector="s3"	subsector="u6"> 608 </item>
	<item id="i195"	sector="s1"	subsector="u2"> 700 </item>
	<item id="i196"	sector="s1"	subsector="u3"> 281 </item>
	<item id="i197"	sector="s3"	subsector="u3"> 627 </item>
	<item id="i198"	sector="s2"	subsector="u1"> 966 </item>
	<item id="i199"	sector="s2"	subsector="u5"> 990 </item>
	<item id="i200"	sector="s1"	subsector="u2"> 465 </item>
	<item id="i201"	sector="s2"	subsector="u4"> 586 </item>
	<item id="i202"	sector="s1"	subsector="u2"> 272 </item>
	<item id="i203"	sector="s2"	subsector="u1"> 370 </item>
	<item id="i204"	sector="s2"	subsector="u5"> 334 </item>
	<item id="i205"	sector="s2"	subsector="u6"> 255 </item>
	<item id="i206"	sector="s2"	subsector="u3"> 192 </item>
	<item id="i207"	sector="s2"	subsector="u2"> 467 </item>
	<item id="i208"	sector="s4"	subsector="u2"> 282 </item>
	<item id="i209"	sector="s2"	subsector="u4"> 446 </item>
	<item id="i210"	sector="s2"	subsector="u3"> 979 </item>
	<item id="i211"	sector="s1"	subsector="u3"> 11 </item>
	<item id="i212"	sector="s3"	subsector="u5"> 829 </item>
	<item id="i213"	sector="s2"	subsector="u2"> 178 </item>
	<item id="i214"	sector="s4"	subsector="u4"> 655 </item>
	<item id="i215"	sector="s2"	subsector="u6"> 458 </item>
	<item id="i216"	sector="s3"	subsector="u5"> 747 </item>
	<item id="i217"	sector="s3"	subsector="u2"> 66 </item>
	<item id="i218"	sector="s3"	subsector="u1"> 38 </item>
	<item id="i219"	sector="s3"	subsector="u4"> 700 </item>
	<item id="i220"	sector="s2"	subsector="u3"> 799 </item>
	<item id="i221"	sector="s1"	subsector="u1"> 57 </item>
	<item id="i222"	sector="s3"	subsector="u1"> 358 </item>
	<item id="i223"	sector="s1"	subsector="u2"> 276 </item>
	<item id="i224"	sector="s3"	subsector="u2"> 410 </item>
	<item id="i225"	sector="s4"	subsector="u6"> 824 </item>
	<item id="i226"	sector="s3"	subsector="u2"> 454 </item>
	<item id="i227"	sector="s2"	subsector="u6"> 904 </item>
	<item id="i228"	sector="s3"	subsector="u3"> 584 </item>
	<item id="i229"	sector="s3"	subsector="u4"> 450 </item>
	<item id="i230"	sector="s1"	subsector="u5"> 451 </item>
	<item id="i231"	sector="s2"	subsector="u5"> 602 </item>
	<item id="i232"	sector="s3"	subsector="u3"> 524 </item>
	<item id="i233"	sector="s1"	subsector="u3"> 751 </item>
	<item id="i234"	sector="s2"	subsector="u2"> 530 </item>
	<item id="i235"	sector="s1"	subsector="u5"> 7 </item>
	<item id="i236"	sector="s2"	subsector="u4"> 836 </item>
	<item id="i237"	sector="s3"	subsector="u6"> 850 </item>
	<item id="i238"	sector="s2"	subsector="u4"> 719 </item>
	<item id="i239"	sector="s4"	subsector="u1"> 839 </item>
	<item id="i240"	sector="s2"	subsector="u6"> 800 </item>
	<item id="i241"	sector="s4"	subsector="u4"> 311 </item>
	<item id="i242"	sector="s1"	subsector="u3"> 785 </item>
	<item id="i243"	sector="s2"	subsector="u4"> 792 </item>
	<item id="i244"	sector="s2"	subsector="u4"> 18 </item>
	<item id="i245"	sector="s2"	subsector="u5"> 299 </item>
	<item id="i246"	sector="s3"	subsector="u2"> 107 </item>
	<item id="i247"	sector="s3"	subsector="u5"> 396 </item>
	<item id="i248"	sector="s2"	subsector="u6"> 805 </item>
	<item id="i249"	sector="s1"	subsector="u5"> 883 </item>
	<item id="i250"	sector="s4"	subsector="u3"> 922 </item>
	<item id="i251"	sector="s2"	subsector="u2"> 632 </item>
	<item id="i252"	sector="s2"	subsector="u3"> 980 </item>
	<item id="i253"	sector="s1"	subsector="u4"> 689 </item>
	<item id="i254"	sector="s2"	subsector="u6"> 641 </item>
	<item id="i255"	sector="s4"	subsector="u4"> 314 </item>

	<sector id="s1">Sector  1 </sector>
	<sector id="s2">Sector  2 </sector>
	<sector id="s3">Sector  3 </sector>

	<subsector id="u1">Subsector  1 </subsector>
	<subsector id="u2">Subsector  2 </subsector>
	<subsector id="u3">Subsector  3 </subsector>
	<subsector id="u4">Subsector  4 </subsector>
	<subsector id="u5">Subsector  5 </subsector>
</data>


Вот то, чего я добился:
Код: plaintext
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.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>

  <xsl:template match="data">
    <html>
      <head>
        <title>Task1</title>
        <style>
          .sector-title{font-size: 16pt;font-weight: bold;}
          .subsector-title{font-size: 12pt;font-weight: bold;}
        </style>
      </head>
      <body>
        <table>
          <xsl:for-each select="sector">
            <xsl:call-template name="sector">
              <xsl:with-param name="sId" select="@id"/>
              <xsl:with-param name="sPos" select="position()"/>
            </xsl:call-template>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
  
  <xsl:template match="sector" name="sector">
    <xsl:param name="sId"/>
    <xsl:param name="sPos"/>
    <tr>
      <td colspan="2">
        <span class="sector-title">
          <xsl:apply-templates></xsl:apply-templates>
        </span>
      </td>
    </tr>
    <xsl:for-each select="/data/subsector">
      <tr>
        <td colspan="2">
          <span class="subsector-title">
            <xsl:apply-templates></xsl:apply-templates>
          </span>
        </td>
      </tr>
      <xsl:call-template name="subsector">
        <xsl:with-param name="sId" select="$sId"/>
        <xsl:with-param name="sPos" select="$sPos"/>
      </xsl:call-template>
    </xsl:for-each>
  </xsl:template>
  <xsl:template match="subsector" name="subsector">
    <xsl:param name="sId"/>
    <xsl:param name="sPos"/>
    <xsl:param name="ssId" select="@id"/>
    <xsl:param name="ssPos" select="position()"/>
    <xsl:apply-templates select="/data/item">
      <xsl:sort select="substring-after(@id, 'i')" data-type="number" />
      <xsl:with-param name="sId" select="$sId" />
      <xsl:with-param name="ssId" select="@id" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="item">
    <xsl:param name="sId"/>
    <xsl:param name="ssId"/>
    <xsl:if test="@subsector = $ssId and @sector = $sId">
      <tr>
        <td>
          <xsl:value-of select="@id" />
        </td>
        <td>
          <xsl:apply-templates>
          </xsl:apply-templates>
        </td>
      </tr>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

буду очень признателен если кто поможет! плиз!
...
Рейтинг: 0 / 0
18.02.2010, 00:13
    #36476411
nons111ww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT помогите ПЛИЗ!!! готов заплатить!
черт!!! 50$ !!!, это преобразование кровь с носа нужно...
...
Рейтинг: 0 / 0
18.02.2010, 00:55
    #36476453
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT помогите ПЛИЗ!!! готов заплатить!
nons111wwт е нужно чтобы ...скажем "<hr />" отрисовывался в тех местах, где будет это мнимый переход на след страницуТак как все таки определить, где он должен стоять?
...
Рейтинг: 0 / 0
18.02.2010, 01:44
    #36476479
nons111ww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT помогите ПЛИЗ!!! готов заплатить!
_Vasilisk_,

А сорри, короче должно быть не больше 25 item's на "странице" но переход должен быть только между subsector'ами. внутри subsector'a между item'ами перехода быть не может
...
Рейтинг: 0 / 0
18.02.2010, 11:41
    #36477051
nons111ww
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT помогите ПЛИЗ!!! готов заплатить!
вот еще один промежуточный вариант, но он разбивает на страницы только внутри Sector'a, нужно сделать так, чтобы от сектора не зависел...
Код: plaintext
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.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>


  <xsl:template match="data">
    <html>
      <head>
        <title>Task1</title>
        <style>
          .sector-title{font-size: 16pt;font-weight: bold;}
          .subsector-title{font-size: 12pt;font-weight: bold;}
        </style>
      </head>
      <body>
        <table>
          <xsl:for-each select="sector">
            <xsl:call-template name="sector">
              <xsl:with-param name="sId" select="@id"/>
              <xsl:with-param name="sPos" select="position()"/>
            </xsl:call-template>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>


  <xsl:template match="sector" name="sector">
    <xsl:param name="sId"/>
    <xsl:param name="sPos"/>
    <tr>
      <td colspan="2">
        <span class="sector-title">
          <xsl:apply-templates></xsl:apply-templates>
        </span>
      </td>
    </tr>
    <xsl:for-each select="/data/subsector">
      <xsl:call-template name="subsector">
        <xsl:with-param name="sId" select="$sId"/>
        <xsl:with-param name="sPos" select="$sPos"/>
      </xsl:call-template>
    </xsl:for-each>
  </xsl:template>


  <xsl:template match="subsector" name="subsector">
    <xsl:param name="sId"/>
    <xsl:param name="sPos"/>
    <xsl:param name="ssId" select="@id"/>
    <xsl:param name="ssPos" select="position()"/>
    <xsl:call-template name="subsectorCounter">
      <xsl:with-param name="sId" select="$sId"/>
      <xsl:with-param name="ssId" select="$ssId"/>
      <xsl:with-param name="sPos" select="$sPos"/>
      <xsl:with-param name="ssPos" select="$ssPos"/>
      <xsl:with-param name="currPos" select="1"/>
      <xsl:with-param name="startPos" select="1"/>
    </xsl:call-template>
    <tr>
      <td colspan="2">
        <span class="subsector-title">
          <xsl:apply-templates></xsl:apply-templates>
        </span>
      </td>
    </tr>
    <xsl:apply-templates select="/data/item">
      <xsl:sort select="substring-after(@id, 'i')" data-type="number" />
      <xsl:with-param name="sId" select="$sId" />
      <xsl:with-param name="ssId" select="@id" />
    </xsl:apply-templates>
  </xsl:template>


  <xsl:template match="subsector" name="subsectorCounter">
    <xsl:param name="sId"/>
    <xsl:param name="sPos"/>
    <xsl:param name="ssId"/>
    <xsl:param name="ssPos"/>
    <xsl:param name="currPos"/>
    <xsl:param name="startPos"/>
    <xsl:param name="count"/>
    <xsl:if test="count(/data/item[@sector = $sId  and  @subsector = /data/subsector[$startPos <= position() and position() <= $currPos]/@id  ]) > 25">
      <xsl:if test="$currPos = $ssPos">
        <tr><td colspan="2"><hr style="width: 100px;"></hr></td></tr>
      </xsl:if>
      <xsl:if test="$currPos < $ssPos">
        <xsl:call-template name="subsectorCounter">
          <xsl:with-param name="sId" select="$sId"/>
          <xsl:with-param name="ssId" select="$ssId"/>
          <xsl:with-param name="sPos" select="$sPos"/>
          <xsl:with-param name="ssPos" select="$ssPos"/>
          <xsl:with-param name="currPos" select="$currPos"/>
          <xsl:with-param name="startPos" select="$currPos"/>
          <xsl:with-param name="count" select="0" />
        </xsl:call-template>
      </xsl:if>
    </xsl:if>
    <xsl:if test="count(/data/item[@sector = $sId  and  @subsector = /data/subsector[$startPos <= position() and position() <= $currPos]/@id  ]) <= 25">
      <xsl:call-template name="subsectorCounter">
        <xsl:with-param name="sId" select="$sId"/>
        <xsl:with-param name="ssId" select="$ssId"/>
        <xsl:with-param name="sPos" select="$sPos"/>
        <xsl:with-param name="ssPos" select="$ssPos"/>
        <xsl:with-param name="currPos" select="$currPos+1"/>
        <xsl:with-param name="startPos" select="$startPos"/>
        <xsl:with-param name="count" select="0" />
      </xsl:call-template>
    </xsl:if>
  </xsl:template>


  <xsl:template match="item">
    <xsl:param name="sId"/>
    <xsl:param name="ssId"/>
    <xsl:if test="@subsector = $ssId and @sector = $sId">
      <tr>
        <td>
          <xsl:value-of select="@id" />
        </td>
        <td>
          <xsl:apply-templates>
          </xsl:apply-templates>
        </td>
      </tr>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

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


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