2012-04-07 18 views
8

Chcę pokazać wyjście kanału RSS w sformatowanej HTML w komponencie TWebBrowser, jeśli obciążenie to paszowego http://code.google.com/feeds/p/v8/svnchanges/basic w TWebbrowser, to pokazuje zawartość jako plik XMLJak mogę wyświetlić dane wyjściowe kanału RSS w formacie HTML w TWebBrowser?

enter image description here

ale jeśli używam IE załadować tę samą stronę

enter image description here

próbowałem wstrzykiwanie CSS załadowanego IHTMLDocument2 jak sugeruje się w tej kwestii CSS and TWebbrowser delphi ale wciąż otrzymuję ten sam rezultat.

Pytanie brzmi, w jaki sposób mogę załadować kanał RSS w TWebbrowser, ale pokazując wynik jako dokument HTML, taki jak IE?

Odpowiedz

5

tylko przypuszczenie, ale można spróbować zastosowanie następujące stylów XSL (wzięte z http://snippets.dzone.com/posts/show/1162 i zmodyfikowany zgodnie z sugestią cherdt w komentarzach poniżej):

<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> 

do paszy jesteś przyjmującego. Aby przekształcić dokument, zapoznaj się z this question's selected answer, a następnie możesz spróbować przypisać wynikowy XML do WebBrowser.

Zgaduję, że kierujesz swoją kontrolkę WebBrowser do kanału, ale używając tej metody, musisz pobrać kanał za pomocą, na przykład, Indy (sprawdź TIdHTTP i jego metodę Get()), przekształć ją, a następnie pokaż pod twoją kontrolą.

Proszę zauważyć, że powyższe jest tylko domysłem, ale uważam, że jest to dobre założenie. :)

2

IE stosuje domyślny arkusz stylów i transformację XSL do pliku XML źródła danych RSS. To jest kwestia IE, a nie standard czy coś w tym stylu.

Trzeba będzie zrobić coś podobnego samemu, modyfikując stronę przed jej wyświetleniem.