Avatar billede malm Nybegynder
08. november 2001 - 17:25 Der er 2 kommentarer og
1 løsning

Problemer med match og select

Jeg har problemer med udvælgelse af elementet PLANET idet jeg får for meget med:

<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
<TEMPLATE>
<PLANETS>
  <PLANET>
    <NAME>Earth</NAME>
    <MASS>1</MASS>
  </PLANET>
  <PLANET>
    <NAME>Venus</NAME>
    <MASS>0.815</MASS>
  </PLANET>
  <PLANET>
    <NAME>Mercury</NAME>
    <MASS>0.0553</MASS>
  </PLANET>
</PLANETS>
<STARS>
  <STAR>
    <NAME>Sun</NAME>
    <MASS>1.87</MASS>
  </STAR>
</STARS>
</TEMPLATE>

<?xml version=\"1.0\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">
<xsl:template match=\"/PLANETS\">
  <html>
    <head></head>
    <body>
    <xsl:apply-templates select=\"PLANET\"/>
    </body>
  </html>
</xsl:template>
<xsl:template match=\"PLANET\">
    <xsl:apply-templates select=\"NAME\"/>
    <xsl:apply-templates select=\"MASS\"/>
</xsl:template>
<xsl:template match=\"NAME\">
        <xsl:value-of select=\".\"/>
</xsl:template>
<xsl:template match=\"text()\"/>
<xsl:template match=\"MASS\">
        <xsl:value-of select=\".\"/>
</xsl:template>
</xsl:stylesheet>

Hvad gør jeg forkert siden jeg får følgende output:


Earth1Venus0.815Mercury0.0553Sun1.87

Jeg har jo kun bedt om PLANETS!

HTML Output er genereret via Saxon Instant v6.44


Med venlig hilsen
Henrik Malmvig
Avatar billede ehf Nybegynder
08. november 2001 - 19:57 #1
Egentlig burde text() fange de elementer som du ikke har angivet en template for.

Men prøv med nedenstående

<?xml version=\"1.0\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">


<xsl:template match=\"/\">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match=\"PLANET\">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match=\"NAME\">
        <xsl:value-of select=\".\"/>
</xsl:template>
<xsl:template match=\"MASS\">
        <xsl:value-of select=\".\"/>
</xsl:template>

<xsl:template match=\"STARS\"/>
</xsl:stylesheet>
Avatar billede Slettet bruger
09. november 2001 - 15:31 #2
Grunden til at text() ikke fanger noget er at den aldrig bliver instantieret.

Hvis man f.eks. bruger apply-templates i stedet for value-of, kan man som regel bedre styre den slags.

/CS
Avatar billede malm Nybegynder
13. november 2001 - 11:48 #3
Tak for hjælpen!

Det var et problem der har drillet gennem et stykke tid. Langt om længe ser det ud til at jeg kan komme videre med XSLT. Jeg håber dog ikke det er nødvendigt at \"fange alle\" uønskede elements på denne måde, det var vel det some text() burde gøre!? Er det Saxon, der har en fejl?

Med venlig hilsen
Henrik Malmvig
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