Avatar billede jochke Nybegynder
23. april 2003 - 20:37 Der er 17 kommentarer og
1 løsning

XSL og RSS

Jeg prøver at lave noget asp scipt der kan hente en RSS nyhedsfil. Den skal formateres med en XSL fil. Men som den XML newbie jeg er, kan jeg ikke helt få det til at virke. Skal jeg ikke bare betragte en RSS fil som alm. XML? Her er linket til den XML fil jeg vil have lavet et XSL dokument til: http://www.asdf.dk/rss/da/comon.rss
Avatar billede jochke Nybegynder
23. april 2003 - 20:40 #1
Jeg har strikket lidt XSL kode sammen.

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
  <html>
  <body>
    <h2>News</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">Title</th>
      <th align="left">Link</th>
    </tr>
    <xsl:for-each select="item">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="link"/></td>
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template></xsl:stylesheet>

Hvad er der galt?
Avatar billede Slettet bruger
23. april 2003 - 22:26 #2
Din for-each leder efter "item" elementer i default namespacet, men dem du skal bruge tilhører "http://purl.org/rss/1.0/" - gør flg.:

1. Indsæt flg. i xsl:stylesheet elementet:

  xmlns:rss="http://purl.org/rss/1.0/" exclude-result-prefixes="rss"

2. prefix item, title & link med "rss:" - altså "rss:item" osv.

/CS
Avatar billede jochke Nybegynder
23. april 2003 - 22:57 #3
default namespacet?
Avatar billede jochke Nybegynder
23. april 2003 - 23:05 #4
Jeg er newbie på dette felt... Hvad mener du med 2'eren? Sådan her:
    <xsl:for-each select="item">
    <tr>
      <td><xsl:value-of select="rss:item"/></td>
      <td><xsl:value-of select="rss:link"/></td>
    </tr>
    </xsl:for-each>
Avatar billede Slettet bruger
23. april 2003 - 23:07 #5
Næsten:

<xsl:for-each select="rss:item">
    <tr>
      <td><xsl:value-of select="rss:title"/></td>
      <td><xsl:value-of select="rss:link"/></td>
    </tr>
</xsl:for-each>

/CS
Avatar billede jochke Nybegynder
23. april 2003 - 23:12 #6
Hmm mit asp script melder stadig fejl... :( Du kan lige få hele koden for at se om jeg har gjort det korrekt.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"  xmlns:rss="http://purl.org/rss/1.0/" exclude-result-prefixes="rss">

<xsl:template match="/">
  <html>
  <body>
    <h2>News</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">Title</th>
      <th align="left">Link</th>
    </tr>
    <xsl:for-each select="rss:item">
    <tr>
      <td><xsl:value-of select="rss:item"/></td>
      <td><xsl:value-of select="rss:link"/></td>
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
<xsl:value-of select=""/>
Avatar billede Slettet bruger
23. april 2003 - 23:33 #7
1. Du har vel ikke smidt xmlns:xsl="http://www.w3.org/1999/XSL/Transform" væk vel?
2. Den sidste <xsl:value-of /> select'er ingenting - det giver en fejl; at den ligger udenfor <xsl:stylesheet/> giver en fejl mere...

3. Den anden "rss:item" skal være "rss:title", ikke?
Avatar billede jochke Nybegynder
23. april 2003 - 23:51 #8
1. Havde jeg smidt væk.
2. Ups..ja den har jeg fjernet.
3. Jo. Er også rettet.

Nu får jeg ikke fejl men ingen data. :(

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rss="http://purl.org/rss/1.0/" exclude-result-prefixes="rss">

<xsl:template match="/">
  <html>
  <body>
    <h2>News</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">Title</th>
      <th align="left">Link</th>
    </tr>
    <xsl:for-each select="rss:item">
    <tr>
      <td><xsl:value-of select="rss:title"/></td>
      <td><xsl:value-of select="rss:link"/></td>
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
Avatar billede Slettet bruger
23. april 2003 - 23:59 #9
Nå ja - klart :-)

Den nemme løsning er: <xsl:for-each select="/*/rss:item">.

/CS
Avatar billede jochke Nybegynder
24. april 2003 - 00:01 #10
Nu ved jeg ikke om du er en haj til XML og ASP? Men vil godt doble up af point hvis du vil hjælpe mig med det her ski** nyheds script. Mit ASP script ser ud som følge:
<%
Function getXML(sourceFile)
dim styleFile
dim source, style
styleFile = Server.MapPath("news.xsl")

'Henter XML filen
Dim xmlhttp
Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "GET", sourceFile, false
xmlhttp.Send

'Loader XML filen
set source = Server.CreateObject("Microsoft.XMLDOM")
source.async = false
source.loadxml(xmlhttp.ResponseText)

'Loader XSL filen
set style = Server.CreateObject("Microsoft.XMLDOM")
style.async = false
style.load(styleFile)

getXML = source.transformNode(style)
set source = nothing
set style = nothing
End Function
%>
<%= getXML("http://www.asdf.dk/rss/da/computerworld.rss") %>

Fejlen ligger i at der ingen data kommer ud. Du kan se resultatet her: http://www.jochke.dk/v3/news/
Avatar billede jochke Nybegynder
24. april 2003 - 00:06 #11
Jeg har set den med både <xsl:template match="/"> og <xsl:template match="*">. Hvad er forskellen, og hvad betyder det?
Avatar billede Slettet bruger
24. april 2003 - 00:13 #12
Den sidste først:
- match="/" definerer en template for roden af XML dokumentet (dvs. det yderste elements "parent", så at sige...)

- match="*" definerer en template for *alle* elementer! Noget helt andet...

Så til resten:
- Prøv først at erstatte "source.loadxml(xmlhttp.ResponseText)" med "source.load(xmlhttp.ResponseXML)"

Der er noget med at LoadXML() ikke kan finde ud af det, når XML teksten indeholder '<?xml version...?>'

/CS
Avatar billede Slettet bruger
24. april 2003 - 00:18 #13
Hvis det ikke er nok, skal du finde ud af hvilken MSXML version der er installeret på serveren.

Erstat "Microsoft.XMLDOM" med flg. for at teste, hvis du får en fejl ala "Couldn't create object" eller "Wrong ProgID" er versionen ikke installeret:

"MSXML2.DOMDocument.3.0" - version 3 OK
"MSXML2.DOMDocument.4.0" - version 4 OK

- brug version 4 hvis den er installeret, og check om det giver noget...

/CS
Avatar billede jochke Nybegynder
24. april 2003 - 00:35 #14
Du er en fucking skat! :D Tak for hjælpen! Det virkede sku.
Avatar billede jochke Nybegynder
24. april 2003 - 00:41 #15
Et sidste spørgsmål. <td><a href="<xsl:value-of select="rss:link"/>"><xsl:value-of select="rss:title"/></a>

Hvorfor kan man ikke det?
Avatar billede Slettet bruger
24. april 2003 - 00:48 #16
Fordi det gøres meget mere elegant med:

<a href="{rss:link}"><xsl:value-of select="rss:title"/></a>

- alternativt (hvis der f.eks. er "ren" tekst blandet hermed):

<a><xsl:attribute name="href"><xsl:value-of select="rss:link" />#bottom</xsl:attribute></a>

/CS
Avatar billede Slettet bruger
24. april 2003 - 00:49 #17
Ups - ved at blive sent :-)

<a><xsl:attribute name="href"><xsl:value-of select="rss:link" />#bottom</xsl:attribute><xsl:value-of select="rss:link" /></a>

/CS
Avatar billede jochke Nybegynder
24. april 2003 - 00:51 #18
Hmm tror jeg har hittet ud af det...

XML er noget mærkeligt noget.
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