Avatar billede niemeyer Nybegynder
15. februar 2006 - 12:29 Der er 6 kommentarer og
1 løsning

Konvertere apostrof

Jeg vil gerne trække et rss feed fra et site, men problemet er at det for ofte brækker pga. en apostrof i description feltet (fx. hvis nogen skriver "That's" eller lignende) Jeg har et stylesheet, men mangler lige den rigtige kodestump der kan lave "'" om til "'" (hvis jeg da ellers har forstået det rigtigt). Her er feed'et med det første item:

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
  <title>OWL: Patient Information</title>
  <link>http://www.orthopaedicweblinks.com</link>
  <description>Patient education information on orthopedic and musculoskeletal problems</description>
  <language>en-us</language>
  <lastBuildDate>Sat Feb 11 2006 11:26:40 GMT</lastBuildDate>
  <copyright>Copyright 2005 OWL Inc.</copyright>
  <managingEditor>orthopaedicweblinks@gmail.com (Christian Veillette)</managingEditor>
  <webMaster>orthopaedicweblinks@gmail.com (OWL Inc.)</webMaster>
  <item>
  <title>Patient Information from Biomet</title>
  <link>http://www.orthopaedicweblinks.com/Detailed/1549.html</link>
  <description>Patient Information from a manufacturer of joint replacement implants and other orthopaedic equipment</description>
  <pubDate>2002-01-31 11:26:40 GMT</pubDate>
  <guid isPermaLink="false">http://www.orthopaedicweblinks.com/cgi-bin/owl/jump.cgi?ID=1549</guid>
  <author />
  </item>
...

Her er mit xls stylesheet :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:param name="TITLE"/>
<xsl:template match="rss">
  <!-- Do not show channel image -->
  <xsl:for-each select="channel/item">
    <br>

    <strong><a href="{link}" target="_main"><xsl:value-of select="title"/></a></strong><br></br>

    <!-- only display markup for description if it's present -->

    <xsl:value-of select="description"/>

    </br>
    <br></br>
  </xsl:for-each>
</xsl:template>

<xsl:template match="description">
  <br>
    <xsl:value-of select="."/>

  </br>
</xsl:template>

</xsl:stylesheet>
...

Hvordan skal den template se ud der konverterer apostrofen? Har ikke arbejdet særligt meget med XML/XSL før...

Thanx, Niels
Avatar billede janegil Nybegynder
15. februar 2006 - 14:27 #1
Jeg tror du er utenfor det som skal være mulig med XSLT her. For XSLT forutsetter velformet XML. Pga apostrofene er din input ikke det.

Det nytteløse forslaget er jo å be de som publiserer feeden om å gjøre det rett.

Mer konstruktivt vil jeg forslå at du først leser feeden som en eneste tekstreng, bytter ut apostrofene, og så loader den nå velformede strengen som XML.

(Men skal ALLE apostrofene byttes, tro?)
Avatar billede niemeyer Nybegynder
15. februar 2006 - 16:08 #2
Tak for kommentaren Jan, men det må jo findes et stylesheet der virker eftersom jeg kan trække feed'et ind på Yahoo eller Google og få well-formed XML ud af det... Se http://e.my.yahoo.com/config/cstore?.opt=content&.url=http%3a//www.orthopaedicweblinks.com/rss2.xml og http://www.google.com/ig/add?feedurl=http://www.orthopaedicweblinks.com/rss2.xml. Så mon ikke det skulle lade gøre at konvertere det "on the fly"?
Avatar billede niemeyer Nybegynder
15. februar 2006 - 16:21 #3
Må lige rette mig selv: Det er selvfølgelig ikke well-formed XML der kommer ud af et RSS feed, men derimod html. Hvis man indlæser xml-filen http://www.orthopaedicweblinks.com/rss2.xml i IE 6.0 brækker den første gang den støder på apostroffen, Netscape 8.0.3. parser filen ok, men sætter "?" istedet for "'", mens Opera 8 læser den perfekt i dens egen rss reader...
Avatar billede janegil Nybegynder
15. februar 2006 - 16:36 #4
Du vet vel ikke om yahoo & google løser saken med XSLT, gjør du?

Er du sikker på at problemet er apostrof? Jeg tror ikke det er en vanlig apostrof men spesialtegnene 146, 146 og 148. Hex: 93, 94 og 95. I iso-8859-1 er de kontrolltegn. I HTML bruker browserne alltid windows.1252 i stedet, og der er tegnene - ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT - "LEFT DOUBLE QUOTATION MARK", "RIGHT DOUBLE QUOTATION MARK" og "BULLET". XML er strengere enn HTML. Hvis du kan få fortalt systemet ditt at dette er kodet i windows-1252, så går det bra. Det beste er naturligvis om feeden blir merka med rett tegnsett i HTTP-headeren. <?xml version="1.0" encoding="windows-1252"?> vil også virke, selv om http://validator.w3.org/check?uri=http%3A%2F%2Fwww.orthopaedicweblinks.com%2Frss2.xml fortsatt vil protestere.
Avatar billede niemeyer Nybegynder
15. februar 2006 - 17:02 #5
Nej, det kan du have ret i... Jeg har kontaktet webmasteren på orthopaedic weblinks og bedt ham om at kigge på sagen. Men da der erfaringsmæssigt godt kan gå et stykke tid så vil jeg prøve et par andre metoder først.
Avatar billede niemeyer Nybegynder
15. februar 2006 - 20:34 #6
Jan, du har ret mht. windows-1252, så det har jeg skrevet til webmasteren. Smid lige et svar så får du points'ne med tak.

//Niels
Avatar billede janegil Nybegynder
16. februar 2006 - 09:14 #7
En fornøyelse å være med på å lede en feedmaster inn på den smale sti.
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