2014-11-03 8 views
1

Имея некоторые проблемы с подбором моего листа XSL при создании RSS-канала на моем сайте.Не удается получить доступ к XSLT-файлу

Я делаю это через код, расположенный в VB, но когда генерируется RSS, все это проходит через одну строку.

Что я делаю неправильно?

Public Sub RssFeed(ByVal cxt As HttpContext) 
    Dim outString As String = "" 
    cxt.Response.Clear() 
    cxt.Response.ContentType = "application/rss+xml" 
    cxt.Response.ContentEncoding = System.Text.Encoding.UTF8 
    Using xw As New XmlTextWriter(cxt.Response.OutputStream, Text.Encoding.UTF8) 

     xw.WriteStartDocument() 
     'processing instruction to style the rss 
     Dim PIText As String = "type=""text/xsl"" href=""Styles/rss.xsl""" 
     xw.WriteProcessingInstruction("xml-stylesheet", PIText) 

     xw.WriteStartElement("rss") 
     xw.WriteAttributeString("version", "2.0") 
     xw.WriteAttributeString("xmlns", "atom", Nothing, "http://www.w3.org/2005/Atom") 

     'channel contains all the RSS feed details 
     xw.WriteStartElement("channel") 

     xw.WriteStartElement("atom:link") 
     xw.WriteAttributeString("stuff") 

     xw.WriteEndElement() 

     xw.WriteElementString("title") 
     xw.WriteElementString("link") 
     xw.WriteElementString("description") 
     xw.WriteElementString("language", "en-gb") 

     xw.WriteStartElement("category") 
     xw.WriteAttributeString("domain") 
     xw.WriteString("Event Log") 
     xw.WriteEndElement() 

     'db connection stuff 

EDIT 2

При осмотре элемента с помощью Chrome на вкладке сети, тип «текст/обычный» - так что это не признавая файлера как RSS/XML.

Я обновил код выше, чтобы содержать строку cxt.Response.ClearHeaders(), но это не изменило, как браузер интерпретирует файл.

EDIT 2

В соответствии с поручением здесь упрощенный XSLT-лист, я использую.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1"> 
    <xsl:output method="html" /> 
    <xsl:variable name="title" select="/rss/channel/title"/> 
    <xsl:template match="/"> 
    <html> 
     <head> 
     <link rel="stylesheet" href="/rss.css" type="text/css"/> 
     </head> 
     <xsl:apply-templates select="rss/channel"/> 
    </html> 
</xsl:template> 
<xsl:template match="channel"> 
    <body> 
     <h2>heading</h2> 
     <h6>small heading</h6> 
     <table border ="1"> 
     <tr> 
      <td bgcolor="#7DCC3D">Title</td> 
      <td bgcolor="#333366">Link</td> 
      <td bgcolor="#7DCC3D">Description</td> 
      <td bgcolor="#333366">Published</td> 
     </tr> 
     <xsl:for-each select="rss/channel/item"> 
      <tr> 
      <td><xsl:value-of select="title"/></td> 
      <td><xsl:value-of select="link"/></td> 
      <td><xsl:value-of select="description"/></td> 
      <td><xsl:value-of select="pubDate"/></td> 
      </tr> 
     </xsl:for-each> 
     </table> 
    </body> 
</xsl:template> 
</xsl:stylesheet> 
+0

Можете ли вы уточнить, в чем проблема? Не применяется ли таблица стилей? Можете ли вы показать нам код стилей? Можете ли вы показать нам источник RSS, который генерирует ваш код? –

+0

Извинения - там есть лист, я могу получить к нему доступ через браузер, таблица стилей не применяется. Очень простой XSLT, чтобы увидеть, могу ли я заставить его работать, есть ли настройка, которую мне может понадобиться изменить в IIS, чтобы получить ее, чтобы она понимала XSLT? – SelrekJohn

+0

Если вы отправляете XML с инструкцией по обработке «xml-stylesheet» в браузер, то именно браузер использует клиентскую часть XSLT, это не IIS. Я бы начал проверять консоль ошибок вашего браузера, показывает ли она какие-либо сообщения об ошибках или предупреждения. Если у вас есть общедоступный URL-адрес, мы можем проверить, что вы также можете его опубликовать. –

ответ

1

Я думаю, что это как-то связано с IIS; если вы удалите rss+ с cxt.Response.ContentType = "application/rss+xml", тогда будет отображаться XSLT.

Я рассмотрю, почему это проблема и обновите мой ответ, когда я узнаю.

Смежные вопросы