[XSLT] Meerdere <xsl:if> en <xsl:attribute> werkt niet?

Pagina: 1
Acties:

  • Terranca
  • Registratie: April 2000
  • Laatst online: 09-05 18:25
Ik heb voor een stukje van mijn XSLT sheet, een aantal <xsl:if>'s nodig die bepalen of bepaalde attributen aan een <input> tag gehangen moeten worden. Een enkele <xsl:if> is geen enkel probleem, maar zodra ik er 2 of meer van maak, krijg ik errors. Ik zal eerst even de code copy/pasten:

code:
1
2
3
4
5
6
7
8
9
10
<input type="radio" name="answer[{../../@id}]" value="{@id}">
<xsl:if test="../@multi='true'">
    <xsl:attribute name="type">checkbox</xsl:attribute>
    <xsl:attribute name="name">answers[<xsl:value-of select="../../@id"/>][]</xsl:attribute>
</xsl:if>
<!-- Jump on selected -->
<xsl:if test="@skipto and @skiponpage='1'" xml:space="preserve">
    <xsl:attribute name="onMouseClick"><xsl:text>javascript:document.location.href = document.location.href + "#" + </xsl:text><xsl:value-of select="@skipto"/>;</xsl:attribute>
</xsl:if>
</input>

genereert de error
code:
1
2
3
Warning: runtime error: file x.xsl line 22 element attribute in x.php on line 315

Warning: xsl:attribute : node already has children in x.php on line 315


(line 22 is de regel met <xsl:attribute name="onMouseClick"><xsl:text>javascript... etc)

Ik heb gezocht op de site van libxslt en het enige wat ik kon vinden is dat <xsl:attribute> niet meer gebruikt mag worden nadat er elementen aan de node zijn toegevoegd. Nou kan het aan mij liggen, maar dit kan toch niet het geval zijn? :P Heeft iemand een idee waarom deze code in de soep loopt? Of dat dit een bug kan zijn van libxslt (heb hun bugzilla afgezocht, maar ook niks kunnen vinden)

Ik gebruik voor de conversie PHP5.0.3 met libxslt 1.1.12 (met libxml 2.6.16)

Verwijderd

Even snel; als je XHTML gebruikt, moet je dan niet sowieso lowercase "onmouseclick" gebruiken i.p.v. "onMouseClick"?

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
hmm vaag? ik heb het ff geprobeerd met deze xsl (omdat je je bronxml niet gepost had):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
        <html>
            <input type="radio" name="answer[{../../@id}]" value="{@id}">
            <xsl:if test="1">
                <xsl:attribute name="type">checkbox</xsl:attribute>
                <xsl:attribute name="name">answers[<xsl:value-of select="../../@id"/>][]</xsl:attribute>
            </xsl:if>
            <!-- Jump on selected -->
            <xsl:if test="1" xml:space="preserve">
                <xsl:attribute name="onMouseClick"><xsl:text>javascript:document.location.href = document.location.href + "#" + </xsl:text><xsl:value-of select="@skipto"/>;</xsl:attribute>
            </xsl:if>
            </input>
        </html>
    </xsl:template>
    
</xsl:stylesheet>

met deze xml:
code:
1
2
<?xml version="1.0" encoding="UTF-8"?>
<foo/>


en daar komt bij mij dit uit:
code:
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <input type="checkbox" name="answers[][]" value="" onMouseClick="javascript:document.location.href = document.location.href + &quot;#&quot; + ;" />
</html>


Dus geen errors? Windows PHP 5.0.1 libxslt 1.1.7 / libxml 2.6.11

  • Terranca
  • Registratie: April 2000
  • Laatst online: 09-05 18:25
Ik heb er nog een tijd mee zitten klooien, en wat blijkt: het ligt aan de xml:space="preserve" in de <xsl:if>. Als ik deze weghaal werkt hij wel. Gelukkig had ik xml:space op die plek toch niet meer nodig, dus probleem opgelost :)