Avatar billede gulbaek Nybegynder
30. december 2005 - 15:51 Der er 6 kommentarer og
1 løsning

Opbygning af Menu fra xml fil med titel og url

Forsøger at lave en lille menu og dertil har jeg følgende xml fil.

<?xml version="1.0" encoding="utf-8" ?>
<MenuItem>
  <titel>Hjem
    <http url="~/Default.aspx"></http>
  </titel>
  <titel>dotnetForum
    <http url="http://www.dotnetforum.dk"></http>
  </titel>
  <titel>Om
    <http url="~/Om.aspx"></http>
  </titel>
</MenuItem>

Nu skal jeg så have lavet en tilhørende xslt fil, men har lidt svært ved at hitte udaf det, da jeg ikke ligefrem er nogen ekspert inden for område. Har dog fået lavet følgende og håber nogen kan hitte udaf hvad jeg gør forkert.

<?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>
      <body>
          <xsl:for-each select="MenuItem">
            <a href="{$http}"><xsl:value-of select="$http"/>
              <xsl:value-of select="titel"/>
            </a>
        </xsl:for-each>
        </body>
    </html>
  </xsl:template>

</xsl:stylesheet>
Avatar billede schwarz84 Nybegynder
30. december 2005 - 16:03 #1
Du må kun have én rod-knude. Altså kan menuItem ikke være rod i dit XML dokument da der skal kunne være flere. Lav en rodknude der hedder menu:
<?xml version="1.0" encoding="utf-8" ?>
<menu>
<MenuItem>
  <titel>Hjem
    <http url="~/Default.aspx"></http>
  </titel>
  <titel>dotnetForum
    <http url="http://www.dotnetforum.dk"></http>
  </titel>
  <titel>Om
    <http url="~/Om.aspx"></http>
  </titel>
</MenuItem>
</menu>
Så passer det også med at du kan matche med for-each på "MenuItem".
Derudover er tags i HTML altid med små bogstaver. Jeg retter det ikke her, men det burde være "menuitem" ikke "MenuItem".
Derudover giver '$http' ikke mening som XPath udtryk. Det du vil have er nok nærmere 'titel/http'
Avatar billede schwarz84 Nybegynder
30. december 2005 - 16:06 #2
Altså noget i retningen af:
<?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>
      <body>
          <xsl:for-each select="MenuItem">
            <a href="{titel/http}">
              <xsl:value-of select="titel"/>
            </a>
        </xsl:for-each>
        </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
Avatar billede schwarz84 Nybegynder
30. december 2005 - 16:08 #3
Sorry, url'en er en attribut på http. Så skal den matches med 'titel/http/@url' i stedet.
Avatar billede gulbaek Nybegynder
30. december 2005 - 16:54 #4
Ser ellers fornuftig nok ud, men jeg får ikke rigtig noget ordentlig ud.
Når jeg kører en debug på det i visual studio 2005, smider den kun følgende retur

<html>
  <body></body>
</html>
Avatar billede schwarz84 Nybegynder
30. december 2005 - 17:48 #5
Ok, så prøv det her:
<?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>
            <body>
                <xsl:for-each select="//MenuItem">
                    <a href="{titel/http/@url}">
                        <xsl:value-of select="titel"/>
                    </a>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Havde ikke lige prøvet at køre det :-)

Nu gør den hvad du beder den om: for hver MenuItem tager den den første title og url og laver det til et link.
Avatar billede schwarz84 Nybegynder
30. december 2005 - 17:50 #6
Eller lidt pænere med et exact XPath-udtryk kan du køre for-each på 'menu/MenuItem' i stedet.
Avatar billede gulbaek Nybegynder
30. december 2005 - 18:25 #7
Tror jeg er ved at have det nu, skulle lige ændre lidt i min xml fil.

<?xml version="1.0" encoding="utf-8" ?>
<menu>
  <MenuItem>
    <titel>
      Hjem
      <http url="~/Default.aspx"></http>
    </titel>
  </MenuItem>
  <MenuItem>
    <titel>
      dotnetForum
      <http url="http://www.dotnetforum.dk"></http>
    </titel>
  </MenuItem>
  <MenuItem>
    <titel>
      Om
      <http url="~/Om.aspx"></http>
    </titel>
  </MenuItem>
</menu>

Nu kan jeg da se at resultatet kommer rigtig nok ud, nu skal jeg bare lige have mit asp.net kode til at forstå det også :-) Men tak for hjælpen
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