Avatar billede hmm10 Nybegynder
28. september 2008 - 22:21 Der er 7 kommentarer og
1 løsning

Loop i og xsl:if

Hey!

Jeg er ikke særlig skrap til xslt endnu og har lidt problemer nu, hvor jeg ikke rigtig kan se lyset forenden af tunnelen :(

Jeg ønsker et loop som tæller 1,2,3.. dog er der nogle, som ikke passer til min xml:if - og som derfor ikke ikke skal med i 1,2,3.. listen. Jeg har erfaring med php og har derfor prøvet og lave et eksempel herunder, som kunne "ligne" en løsning:

  <xsl:template match="//Page">
    <xsl:param name="depth"/>
    <xsl:if test="@InPath!='True' and @Active!='True'">
      <xsl:variable name="i" select="$i + 1"/>
      nummer: <xsl:value-of select="$i" disable-output-escaping="yes"/>
    </xsl:if>
  </xsl:template>
Avatar billede jokkejensen Novice
29. september 2008 - 09:54 #1
Gider du lige droppe dit xml, det giver lidt større mulighed for at smide en løsning :)

Men ellers ville jeg oversætte dit eksempel som:

<xsl:template match="//Page[@InPath != 'True' and @Active != 'True']">
<xsl:value-of select="position()" /> <!-- Udskriver nummer -->
</xsl:template>
Avatar billede hmm10 Nybegynder
29. september 2008 - 11:09 #2
jokkejensen: Dit eksempel kunne være en løsning, men den lister ikke efter 1,2,3.. - Den skriver fx. 1,2,4..
Avatar billede jokkejensen Novice
29. september 2008 - 11:15 #3
Så fortæl mig hvad du ønsker... Det var hvad jeg forstod af:

"Jeg ønsker et loop som tæller 1,2,3.. dog er der nogle, som ikke passer til min xml:if - og som derfor ikke ikke skal med i 1,2,3.. "
Avatar billede hmm10 Nybegynder
29. september 2008 - 11:28 #4
jokkejensen: undskyld, hvis jeg ikke har udtykket mig klart nok - den skal lave et loop og derved en liste, der altid ender med at hedde 1,2,3.. der er nogle i listen som ikke opfylder "kravende" til at være i listen, og som derfor ikke skal være med i den.

Dvs:
@Navn = 'hej', @InPath = 'True', @Active = 'True'
@Navn = 'med', @InPath = 'True', @Active = 'True'
@Navn = 'hest' , @InPath = 'False', @Active = 'False'
@Navn = 'dig', @InPath = 'True', @Active = 'True'

Skal ende med:
1. hej
2. med
3. dig
Avatar billede jokkejensen Novice
29. september 2008 - 12:14 #5
så kan du løse det med :
        <xsl:template match="/">
    <xsl:variable name="testXml">   
    <elm navn="hej" inp="True" ac="True"></elm>
    <elm navn="med" inp="True" ac="True"></elm>
    <elm navn="hest" inp="False" ac="True"></elm>
    <elm navn="dig" inp="True" ac="True"></elm>    
    </xsl:variable>
    <ul>
    <xsl:for-each select="msxsl:node-set($testXml)/elm[@inp='True' and @ac='True']">
        <li><xsl:value-of select="position()"/> <xsl:value-of select="@navn"/></li>
    </xsl:for-each>
    </ul>   
    </xsl:template>


Jeg bruger lige msxsl:node-set() til at lave en "tekst streng" om til et nodeset der kan behandles med xpath, det kan du bare se bort fra.
Avatar billede jokkejensen Novice
29. september 2008 - 12:14 #6
det outputter:

<ul>
<li>1 hej </li>
<li>2 med </li>
<li>3 dig </li>
</ul>
Avatar billede hmm10 Nybegynder
29. september 2008 - 12:35 #7
Tak for hjælpen jokkejensen. smid et svar :)
Avatar billede jokkejensen Novice
29. september 2008 - 12:48 #8
Selv tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester