Avatar billede hmm10 Nybegynder
27. september 2007 - 19:20 Der er 8 kommentarer og
1 løsning

Visning af children med den samme parent

Hej,

Jeg har loopet mig ned i xml'en og fundet det child, som jeg skal      bruge - nu skal jeg så bare have vist de childrens, som ligger i den allerede fundet parent. Hvordan? (Kan _sikkert_ laves bedre)

  <xsl:template match="/navigation">
      <xsl:apply-templates select="page">
        <xsl:with-param name="depth" select="1"/>
      </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="page">
    <xsl:param name="depth"/>

      <xsl:if test="@active='true'">
        <xsl:value-of select="@name" disable-output-escaping="yes"/>

<!-- Her er den kendte child - hvad med resten ? -->

      </xsl:if>

      <xsl:if test="count(page)">
        <xsl:apply-templates select="page">
          <xsl:with-param name="depth" select="$depth+1"/>
        </xsl:apply-templates>
      </xsl:if>

  </xsl:template>
Avatar billede janegil Nybegynder
28. september 2007 - 11:59 #1
Det er lettere å forstå hvis du kommer med et (lite!) eksempel på en av XML-filene dine. Og litt prosa som beskriver hvilke noder du snakker om.

Et eller annet med preceding-sibling:: ?
Avatar billede hmm10 Nybegynder
28. september 2007 - 12:36 #2
Min xml er lidt sparsom og jeg har ikke mulighed for at tilføje ekstra:

<navigation>
  <page active='false' name='side 1' />
  <page active='false' name='side 2' />
  <page active='false' name='side 3'>
    <page active='false' name='side 6' />
    <page active='false' name='side 7' />
    <page active='true' name='side 8' />
    <page active='false' name='side 9' />
  </page>
  <page active='false' name='side 4' />
  <page active='false' name='side 5' />
</navigation>

Skal returne : "side 6 side 7 side 8 side 9"
Avatar billede janegil Nybegynder
28. september 2007 - 13:36 #3
...og det skal den gjøre fordi side 8 har active="true", right?
Avatar billede hmm10 Nybegynder
28. september 2007 - 13:40 #4
korrekt
Avatar billede nielle Nybegynder
28. september 2007 - 21:34 #5
Noget i denne stil?

  <xsl:template match="/navigation">
    <xsl:apply-templates select="page">
      <xsl:with-param name="depth" select="1"/>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="page">
    <xsl:param name="depth"/>

    <xsl:if test="@active='true'">

      <!-- Her er den kendte child -->
      <xsl:value-of select="@name"/>
     
      <!-- Her dens søskene -->
      <xsl:for-each select="../page">
        <siblings>
          <xsl:value-of select="@name"/>
        </siblings>
      </xsl:for-each>     

    </xsl:if>

    <xsl:if test="count(page)">
      <xsl:apply-templates select="page">
        <xsl:with-param name="depth" select="$depth+1"/>
      </xsl:apply-templates>
    </xsl:if>

  </xsl:template>
Avatar billede hmm10 Nybegynder
29. september 2007 - 00:32 #6
Super flot :)

I skal begge have tak - læg et svar.
Avatar billede nielle Nybegynder
29. september 2007 - 07:35 #7
Svar :^)
Avatar billede nielle Nybegynder
29. september 2007 - 21:33 #8
Nu ved jeg ikke om du skal bruge nogen af de andre oplysninger du samler ind undervejs, men ellers kan det ogsåklares på denne måde:

  <xsl:template match="/">
    <xsl:for-each select="//page[@active='true']/../page">
      <siblings>
        <xsl:value-of select="@name"/>
      </siblings>
    </xsl:for-each>
  </xsl:template>
Avatar billede hmm10 Nybegynder
30. september 2007 - 21:18 #9
Lukker
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