Toon posts:

[XSLT] Probleem xsl:for-each

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ben op het moment bezig om een enquete pagina. De enquete zelf wordt beschreven in xml. Sommigge vragen zijn afhankelijk van wat er wordt ingevuld bij de vragen ervoor of er na.

Het probleem is dat het <xsl:for-each> niet geheel volgens plan werkt

question = beschrijft een vraag.
qtext = vraag text.
type = type vraag.
depend = zijn de vragen waar deze vraag van afhankelijk is.

Stukje XML
code:
1
2
3
4
5
6
7
8
<question id="4">
        
    <qtext>Heb je nog suggesties voor de website?</qtext>
    <type>open</type>
    <depend>1</depend>
    <depend>4</depend>
        
</question>


Het is de bedoeling dat dependArray[vraagnr] = new Array(depend1, depend2); wordt gecreeerd in een stukje javascript.

Stukje XSLT
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<xsl:template name="dependArray">   

var dependArray = new Array();      

<xsl:for-each select="question">    

 dependArray[<xsl:value-of select="@id" />] = new Array(

  <xsl:for-each select="depend">

   <xsl:value-of select="../depend" />

    <xsl:if test="position() != last()">,</xsl:if>

   </xsl:for-each>);    
        
  </xsl:for-each>
        
 </xsl:template>


Als de bovenstaande code wordt aangeroepen onstaat het volgende "dependArray[4] = new Array(1,1);". De waardes van depend veranderen allebei als ik de eerste depend verander.

De xslt boeken zeggen dat je het zo kan doen en ook internet is ook niet veel verhelderd.

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik zie niet 1-2-3 wat er fout gaat, maar in de meeste gevallen zijn er betere manieren dan for-each in XSLT:

code:
1
2
3
4
5
6
7
8
9
10
<script type="text/javascript">
<xsl:comment>
imageURLs = [<xsl:apply-templates select="container/unit" mode="jsarray"/>];        
</xsl:comment>
</script>
..
<xsl:template match="unit" mode="jsarray">
"<xsl:value-of select="img/@src"/>"
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:template>

Verwijderd

Bijna goed, de fout zit in je value-of, gebruik dit en dan werkt het zoals je wilde:

<xsl:value-of select="."/>