Más módszer nincs, az XSL deklaratív nyelv, a változók valójában inkább konstansok, amiknek létrehozásukkor megváltoztathatatlanul rögzül az értékük.
Még esetleg globális változókról lehet szó, de ezeket template nem állíthatja elő, ezeknek is deklarálásukkor definiálni kell az értéküket (ami persze függhet a forrás XML-től). De minden bizonnyal a te esetedben a template állítja elő a változót, így az nem lehet globális.
Az xsl:with-param taghez érvénytelen a value attribútum, select nevű attribútumban kell megadni a paraméter értékét.
Amúgy milyen XSL értelmezőt használsz? Mert egy ilyen hibát egy jobbféle XSL értelmező már fordítási időben kijelez. A kódodban szereplő hiányzó záró tagekről és egyéb XML hibákról nem is beszélve.
Igen azt elrontottam, fáradt voltam :), ezt a kódot csak rögtönöztem azért hibás, de amúgy müködik, a fordító sem száll el hibával. nagyjából ez generáálódik belőle
Ezzel az a baj hogy ha megtalálja a Heading_2-t, azt szépen megcsinálja mint 2 szintű chapter, utána csinál egy 3-as szintűt, ahol még átveszi a Heading2-ből megkapott num értékét, de a Heading_3 num-jét már nem és a címét sem. Utána ugye megy tovább ahol pedig Heading3 van ott mindent szépen legenerál kivéve hogy nem kapja meg a Heading_2-ből átvett num értékét. Lehet hogy ez már nem megoldható XSl-ben?
XSL-ben minden megoldható, ha úgy tetszik, az XSL Turing-teljes. Persze ez csak elméleti jelentőségű, sokminden van, amire nem célszerű használni :D.
Viszont hogy a lényegre is reagálni tudjak, jó lenne mellékelni a kapott XML mellé a forrás XML-t és a helyesen leforduló XSL-t is. Anélkül hiába is próbálna bárki segíteni, csak a sötétben tapogatózna.
forrás xml, csak a lényeget rakom be nem szeretném nagyon széthúzni ezzel a fórumot
<Heading_1>
1. Útmutató
</Heading_1>
<Heading_2>
1.1. Cím
</Heading_2>
<Heading_2>
1.2. Cím
</Heading_2>
<Heading_3>
1.2.1. Cím
</Heading_3>
<Heading_3>
1.2.2. Cím
</Heading_3>
<Heading_2>
1.3. Cím
</Heading_2>
<Heading_3>
1.3.1. Cím
</Heading_3>
<Heading_1>
2. Cím
</Heading_1>
<Heading_2>
2.1 Cím
</Heading_2>
Amikor a Heading_3 template-ből meghívod a h3 templatet, akkor nem adsz értéket a h2_numera paraméternek, így nem is kell azon csodálkozni, hogy a h3 template futásakor a h2_numera értéke egy üres sztring lesz. (Ez csak egy hiba, ami most feltűnt, nem biztos, hogy ezt kijavítva minden működni fog.)
Amúgy az XSL kódodban több tervezési hiba is van, amitől persze működhet, de pl. az alábbi típusú dolgokat egyértelműen kerülni kellene:
Az ilyenek arra utalnak, hogy még nem tudod megfelelően használni az XSL lehetőségeit, több problémát is "gány" módszerrel próbálsz megoldani, amikre valószínűleg létezne sokkal elegánsabb megoldás is.
Persze valahol el kell kezdeni, remélem a további problémák megoldása során egyre jobban át fogod látni az XSL szemléletét, és szebb módszereket fogsz alkalmazni.
Elöször is köszönöm a segítséget, bár nem nagyon tudom hogyan fogom a Heading_3 ban megadni a Heading_2-ben meghatározott $h2_numera értékét, de próbálkozom ahogy azt eddig is tettem. A teljes xsl nem az én kezem műve, igy mindig csak egy adott problémánál próbálom szebbé tenni, igy ezzel is ezt teszem. Csak ide igy gyorsabb volt bemásolni. És persze tanulok, tanulok ezerrel :)
Kipróbáltam az általad küldött XSL kódot az általad küldött XML kódon, de nem azt kaptam, amit te kaptál, nálam számok is szerepelnek a title tageken belül. Azon kívül a generált "XML" nehezen nevezhető XML-nek, mert a szabálytalan tag-létrehozási módszereknek köszönhetően előfordul olyan, hogy kezdőtag nélkül már zárótag jön. De ehhez igazából kipróbálni sem kell, ez ránézésre is látszik.
Én nem fogok könyörögni, hogy tényleg azt küldd el, ami nálad van. Azonkívül úgy érzem, hogy a te megoldásod már nagyon elment rossz irányba ahhoz, hogy jól ki lehessen javítani. Így is sokkal több időt szántam a dologra, mint eredetileg terveztem. Bocs, de nem fogom helyetted megoldani.
Annyit tudok hozzátenni, ahogy látom, ha 3-as szintű címről van szó, akkor az első három . előtti rész a fejezet sorszáma, ezt három substring-before függvénnyel és összefűzésekkel tudod kiszedni, ha így akarod megoldani a dolgot.
Paraméterként
Más módszer nincs, az XSL deklaratív nyelv, a változók valójában inkább konstansok, amiknek létrehozásukkor megváltoztathatatlanul rögzül az értékük.
Még esetleg globális változókról lehet szó, de ezeket template nem állíthatja elő, ezeknek is deklarálásukkor definiálni kell az értéküket (ami persze függhet a forrás XML-től). De minden bizonnyal a te esetedben a template állítja elő a változót, így az nem lehet globális.
próbálkoztam azzal is
Az attribútum neve: select
Amúgy milyen XSL értelmezőt használsz? Mert egy ilyen hibát egy jobbféle XSL értelmező már fordítási időben kijelez. A kódodban szereplő hiányzó záró tagekről és egyéb XML hibákról nem is beszélve.
tényleg rossz
Forrás XML, leforduló XSL
Viszont hogy a lényegre is reagálni tudjak, jó lenne mellékelni a kapott XML mellé a forrás XML-t és a helyesen leforduló XSL-t is. Anélkül hiába is próbálna bárki segíteni, csak a sötétben tapogatózna.
forrás+eredmény
Nem adod át a paramétert
Amúgy az XSL kódodban több tervezési hiba is van, amitől persze működhet, de pl. az alábbi típusú dolgokat egyértelműen kerülni kellene:
Persze valahol el kell kezdeni, remélem a további problémák megoldása során egyre jobban át fogod látni az XSL szemléletét, és szebb módszereket fogsz alkalmazni.
Köszönöm!
Kipróbáltam
Én nem fogok könyörögni, hogy tényleg azt küldd el, ami nálad van. Azonkívül úgy érzem, hogy a te megoldásod már nagyon elment rossz irányba ahhoz, hogy jól ki lehessen javítani. Így is sokkal több időt szántam a dologra, mint eredetileg terveztem. Bocs, de nem fogom helyetted megoldani.
Annyit tudok hozzátenni, ahogy látom, ha 3-as szintű címről van szó, akkor az első három . előtti rész a fejezet sorszáma, ezt három substring-before függvénnyel és összefűzésekkel tudod kiszedni, ha így akarod megoldani a dolgot.