2012-04-07 14 views
8

Voglio mostrare l'output di un feed RSS in un formato HTML in un componente TWebBrowser, se un carico questo feed http://code.google.com/feeds/p/v8/svnchanges/basic in un TWebBrowser, questa mostra il contenuto come un file XMLCome posso visualizzare l'output di un feed RSS in formato HTML in un TWebBrowser?

enter image description here

ma se io uso IE per caricare la stessa pagina

enter image description here

ho provato l'iniezione di un css per l'IHTMLDocument2 caricato come è suggerito in questa domanda CSS and TWebbrowser delphi ma ho ancora ottenere lo stesso risultato.

La domanda è: come posso caricare il feed rss in TWebbrowser ma mostrare l'output come documento HTML come IE?

risposta

5

Solo una supposizione, ma si potrebbe provare ad applicare il seguente foglio di stile XSL (tratto da http://snippets.dzone.com/posts/show/1162 e modificato come suggerito da cherdt nei commenti qui sotto):

<xsl:stylesheet version="1.0" 
    xmlns:atom="http://www.w3.org/2005/Atom" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
    <xsl:apply-templates select="/atom:feed/atom:head"/> 
     <xsl:apply-templates select="/atom:feed"/> 
    </xsl:template> 
    <xsl:template match="atom:feed/atom:head"> 
     <h3><xsl:value-of select="atom:title"/></h3> 
     <xsl:if test="atom:tagline"><p><xsl:value-of select="atom:tagline"/></p></xsl:if> 
     <xsl:if test="atom:subtitle"><p><xsl:value-of select="atom:subtitle"/></p></xsl:if> 
    </xsl:template> 
    <xsl:template match="/atom:feed"> 
     <h3><xsl:value-of select="atom:title"/></h3> 
     <xsl:if test="atom:tagline"><p><xsl:value-of select="atom:tagline"/></p></xsl:if> 
     <xsl:if test="atom:subtitle"><p><xsl:value-of select="atom:subtitle"/></p></xsl:if> 
     <ul> 
      <xsl:apply-templates select="atom:entry"/> 
     </ul> 
    </xsl:template> 
    <xsl:template match="atom:entry"> 
     <li> 
      <a href="{atom:link[@rel='related']/@href}" title="{substring(atom:published, 0, 11)}"><xsl:value-of select="atom:title"/></a> 
      <xsl:choose> 
       <xsl:when test="atom:content != ''"> 
        <p><xsl:value-of select="atom:content" disable-output-escaping="yes" /></p> 
       </xsl:when> 
       <xsl:otherwise> 
        <p><xsl:value-of select="atom:summary" disable-output-escaping="yes" /></p> 
       </xsl:otherwise> 
      </xsl:choose> 
     </li> 
    </xsl:template> 
</xsl:stylesheet> 

al feed che si ricevono. Per trasformare il documento, fare riferimento a this question's selected answer e quindi provare a assegnare l'XML risultante al WebBrowser.

sto indovinando che si punta il controllo WebBrowser al feed, ma utilizzando questo approccio si avrebbe bisogno di scaricare il feed utilizzando, per esempio, Indy (check out TIdHTTP e il suo metodo Get()), trasformarlo, e poi mostra nel tuo controllo.

Si prega di notare che quanto sopra è solo una supposizione, ma credo che sia una buona ipotesi. :)

2

IE applica un foglio di stile predefinito e una trasformazione XSL al codice XML del feed RSS. Questa è una cosa di IE piuttosto che uno standard o qualcosa del genere.

Avresti bisogno di fare qualcosa di simile te stesso modificando la pagina prima che venga visualizzata.