Toon posts:

[XML/XSLT] Parameter in if statement

Pagina: 1
Acties:
  • 515 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goedemorgen,

Ik wil graag het volgende bereiken in m'n xsl: Aanroepen van een template met een parameter en deze vervolgens gebruiken in een if-statement, samen met een vaste tekst.
Hieronder de XSL

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--Template for avi unit -->
  <xsl:template name="AVIUnit">
    <xsl:param name="Number"/>
    
    <xsl:for-each select="*">
      
      <xsl:if test="@name = 'AVI_unit[@Number]_name'">

      </xsl:if>
    </xsl:for-each>
    
  </xsl:template>
  <!-- //Template for avi unit -->


Het gaat dus om dit deel:
<xsl:if test="@name = 'AVI_unit[@Number]_name'">

Dit werkt niet.
Iemand enig idee hoe ik hier het nummer in het if statement kan gebruiken?

  • Gremen
  • Registratie: Juni 2001
  • Laatst online: 19-02 11:05
De waarde van een parameter gaat via $parameternaam

In het bovenstaande geval zou je ook nog kunnen proberen om de variabele naam in je if statement eerst in een xsl:variable te maken. En die dan in je if statement gebruiken.

Verwijderd

Topicstarter
Helaas,

Ik heb het geprobeerd op de volgende manier, maar dit werkt ook niet:
code:
1
2
3
4
5
6
7
8
  <xsl:template name="AVIUnit">
    <xsl:param name="Number"/>

    <xsl:variable name="aviNumber"><xsl:value-of select="$Number"/></xsl:variable>
      
    <xsl:for-each select="*">
      
      <xsl:if test="@name = 'AVI_unit[$aviNumber]_name'">

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 19-02 15:13
iets als :
code:
1
<xsl:if test="@name = concat('AVI_unit[',$aviNumber,']_name')">


misschien ?

Verwijderd

Topicstarter
Thanks! Dat werkt inderdaad... :)

Alleen nu een nieuw probleem. Ik moet een waarde uit de XML als attribuut opgeven bij de output

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- We loop through all aviUnits_1/avi elements again -->
    <xsl:for-each select="../*">

      <xsl:if test="@name=concat('AVI_unitWasteList_', $AVIUnitNumber, '_', $WasteNumber , '_name')">
        <xsl:variable name="wasteName" select="."/>
        <xsl:variable name="wasteValue" select="."/>
        
        <!-- Retrieve the waste caloric value-->
        <xsl:for-each select="../*">
          <xsl:if test="@name=concat('AVI_unitWasteList_', $AVIUnitNumber, '_', $WasteNumber , '_calValue')">
            <xsl:variable name="wasteValue" select="."/>
          </xsl:if>
        </xsl:for-each>
        
        
        <WasteProduct value="{$wasteValue}" unit="MJ/kg" ><xsl:value-of select="$wasteName"/></WasteProduct>        
      </xsl:if>
    </xsl:for-each>


Het gaat hierbij om de <xsl:variable name="wasteValue" select="."/> die gezet moet worden. De melding die ik nu krijg is "The variable or parameter 'wasteValue' was duplicated within the same scope.". Hoe kan ik eerst een variabele declareren en hier later een waarde aan toekennen?

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 19-02 15:13
dat kan niet in xsl. je kunt een waarde maar een keer assignen, en niet meer aanpassen...

ik heb geen idee hoe je input eruit ziet en wat je wil bereiken aan output, maar alle loopjes die je er nu in stopt (of probeert te stoppen) maakt 't niet eleganter...

waarom loop je eigenlijk uberhaupt als de nummers ($AVIUnitNumber, $WasteNumber) bekend zijn ? je kunt de desbtreffende node gewoon selecteren met een expressie als :
code:
1
<xsl:copy-of select="../*[@name=concat('AVI_unitWasteList_', $AVIUnitNumber, '_', $WasteNumber , '_name')]" />


misschien kun je op http://www.zvon.org nog wat rondkijken om ideeen op te doen...

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 09-12-2025
Laat maar. Werkt, toch niet.

[ Voor 151% gewijzigd door Michali op 01-05-2006 13:37 ]

Noushka's Magnificent Dream | Unity


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je het zoveel mogelijk op je huidige oplossing wilt laten lijken, kan je de variabele eruit liften:

XML:
1
2
3
4
5
6
7
<top>
  <foo name="blaat" id="0"/>
  <foo name="pick me" id="1"/>
  <foo name="bar" id="2"/>
  <foo name="pick me" id="3"/>
  <foo name="pick me" id="4"/>
</top>


XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/top">
    <xsl:variable name="val">
      <xsl:for-each select="foo">
        <xsl:if test="@name='pick me'">
          <xsl:value-of select="@id"/>
        </xsl:if>
      </xsl:for-each>
    </xsl:variable>

    <result>
      <xsl:value-of select="$val"/>
    </result>
  </xsl:template>
</xsl:stylesheet>


XML:
1
2
<?xml version="1.0"?>
<result>134</result>


In het algemeen is het misschien netter om de waarde van de variabele gewoon met een XPath expressie te bepalen ipv met loops (for-each).

[ Voor 49% gewijzigd door mbravenboer op 01-05-2006 13:55 ]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Bedankt voor jullie verhelderende antwoorden. Ik heb het omgezet naar gebruik met XPath expressies.
Pagina: 1