Avatar billede mailand Nybegynder
02. april 2005 - 18:48 Der er 1 kommentar og
1 løsning

test om node har children?

Hej

Er det muligt med XSLT (mon ikke) at teste, om der under en given node, findes andre noder?

... Jeg har noget menu generering i et cms system, der driller mig lidt, og vil derfor gerne have mulighed for at teste på ovenstående, da der eller bliver genereret noget fejlagtigt html for menupunkter uden underliggende noder.

Jeg håber, der er nogen, der kan hjælpe...

- hvis der fx. findes en funktion a la hasChildren, som man kan bruge under DOM... Men denne løsning skal køre som rent XSLT

#Mailand
Avatar billede Slettet bruger
04. april 2005 - 00:06 #1
I XSLT kan du sådan set håndtere det automatisk, vha. en af de allervigtigste "instruktioner", der hedder "apply-templates". Den sørger for at tage templates i brug for childnodes til det "nuværende" (current) element - hvis der ingen er, sker der ikke mere - eks.:

XML:
<menu>
  <item>Punkt 1.1</item>
  <item>Punkt 1.2</item>
  <menu>
      <item>Punkt 2.1</item>
  </menu>
</menu>

XSLT (kun templates):
<x:template match="menu">
  <ol>
      <x:apply-templates />
  </ol>
</x:template>
<x:template match="menu/menu">
  <li>
      <ol>
        <x:apply-templates />
      </ol>
  </li>
</x:template>
<x:template match="item">
  <li><x:apply-templates /></li>
</x:template>

Den template der matcher "menu/menu" vil kun blive brugt ved <menu> elementer der ligger indeni et andet <menu> element.

Du har også mulighed for at benytte en lidt mere "programmør-agtig" version, hvis du er midt i noget andet og skal vide om der er chilnodes - ex:

<x:if test="count(child::*) &gt; 0">
... <!-- Der er mindst een childnode -->
</x:if>

/CS
Avatar billede mailand Nybegynder
04. april 2005 - 09:00 #2
hehe... jeg fandt også frem til igår, at count() måtte være min ven... apply-templates kunne også være brugt, men som jeg ser den, så er den ikke ubetinget rekursiv, og det var ikke lige så egnet i dette tilfælde... så jeg brugt count(), og det spillede 100%.

men point til dig alligevel!

#Mailand
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