Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

xslt and nested numbers problems

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
Hoi

zit hier al met 2 mensen op te staren voor net iets te lang:

we proberen een soort van nested structuur te nummeren om de volgorde van een conversatie te volgen:

code:
1
2
3
4
5
6
7
8
9
10
vraag 1
   antwoord 
        vraag 1.1
            antwoord 
                etc...
            antwoord          
   antwoord 
   antwoord 
        vraag 1.2
        vraag 1.3


het gaat het em dus om het nummeren van de vragen enkel die kunnen volgen on eender welk antwoord, en elk antwoord kan meerdere opvolging vragen hebben. (niet elk antwoord heeft een follow up vraag). de orde van antwoorden is belangrijk en kan niet veranderd worden.

de xml is as volgt
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
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<questions> <!-- root -->
<question>
   <title>vraag 1</title>
   <answers>
      <answer>
        <title>antwoord</title>
        <questions>
               <question>
                   <title>vraag 1.1</title>
                   <answers>
                      <answer>
                        <title>antwoord</title>
                        <questions />
                      </answer>
                      <answer>
                        <title>antwoord</title>
                         <questions />
                      </answer>                      
                   </answers>
                 </question>
          </questions>
        </answer>
    <answer>
      <title>antwoord</title>
        <questions/>
    </answer>

    <answer>
      <title>antwoord</title>
        <questions>
               <question>
                   <title>vraag 1.2</title>
                   <answers />
               </question>
               <question>
                   <title>vraag 1.3</title>
                   <answers />
               </question>
        </questions>
    </answer>

     </answers>
</question>
</questions>


het belangrijke is dat de nummering niet in de data mag staan maar dat deze automatish gegeneert moet worden. Logisch voor een mens tamelijk eenvoudig maar we slagen er niet in dit met xslt te vertalen. Voor elke question title moet dus het juiste nummer komen.

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
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html>
<head></head>
<body>
  <xsl:apply-templates />
</body>
</html>
</xsl:template>
                      
<xsl:template match="questions">
   <xsl:apply-templates />
</xsl:template>

<xsl:template match="question">
   <div>
   <xsl:apply-templates />
   </div>
</xsl:template>

<xsl:template match="question/title">
   <h1>  <!-- todo needs to be depth related how to find depth of answer? -->
  <!-- <xsl:value-of count(ancestor::NODES) -->
  
   <xsl:number format="1. " level="multiple" count="questions/question"/> <!-- HET PROBLEEM -->
   <xsl:apply-templates />
   </h1>
</xsl:template>
<xsl:template match="answers">
   <ul><xsl:apply-templates /></ul>
</xsl:template>
<xsl:template match="answer/title">
   <li><xsl:apply-templates /></li>
</xsl:template>
</xsl:stylesheet>


de code voor de andere items is fine en voor te testen de enige van belang is

question/title.

het probleem is dat hoewel de nummer per level echt wel verdiepen (i.e. 1, 1.1., 1.1.1 etc) het ons niet lukt in bovenstaand geval

vraag 1.2 te krijgen: in plaats daarvan krijgen we opnieuw 1.1 (het gekke is wel dat vraag 1.3 dan wordt weergegevn als 1.2).

code:
1
2
3
4
5
6
7
8
9
10
11
vraag 1
   antwoord 
        vraag 1.1
            antwoord 
                etc...    (als je verder xml toevoegt gaat het naar 1.1.1)
            antwoord          
   antwoord 
   antwoord 
        vraag 1.1
        vraag 1.2
              etc,,, (als je verder gaat gaat het naar 1.2.1, 1.2.2)


m.a.w. na elke vraag wordt er een nummer gereset en we snappen niet waarom (we hebben echt al 10-tallen 'count' selects geprobeert maar de resultaten worden niet beter:

answers/answers/question/title etc. maar zodra je in 1 antwoord 2 vragen hebt met elk nog antwoorden loopt het mis.

we denken dat de count 'query' niet werkt maar we hebben echt zoveel geprobeert we beginnen ons af te vragen of het uberhaupt wel kan en/of we een logica fout maken in het gebruik van xslt.
Let wel we zoeken geen hardcore solutions met 20 variablen etc, aangezien dit in feite een mooi recursief probleem is.

Enig idee?