2012-01-03 14 views
2

私はUmbracoにはかなり新しいですが、短時間ですばらしいことをすることができました。私が単にできないことの1つは、RSSフィードです!これは最も難しいことです!私はこの邪悪なことを働かせるために何日も努力してきましたが、それは実りませんでした!Umbraco:RSSフィードの問題を作成する

OK]をクリックして、ここで私は、XSLTファイルに入った新しいRSSフィード文書を作成し、その後、ニュースファイルを含むサイト内のセクション、すなわちニュース、にURLを追加

、私がやっていることです。

以下のコードを確認できます。

このXSLTを作成したら、ドキュメントタイプに入り、新しいマスターページを作成し、マクロを追加してから、コンテンツセクションにページを作成します。

私はこれを行うと、私は次のエラーを取得:以下

ERROR:

This page contains the following errors:

error on line 3 at column 6: XML declaration allowed only at the start of the document

は、最初のエラーにページアップのレンダリングです。

誰かが間違っていると思いますか?私はソースを見て、ニュースのディレクトリファイルをループしていないように見えます。

しかし、このマクロをホームページに追加すると、エラーが表示されますが、ソースを見ると素敵なXMLの負荷が見えますか?

ここで何が問題になりますか?

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet 

    version="1.0" 

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 

    xmlns:rssdatehelper="urn:rssdatehelper" 

    xmlns:dc="http://purl.org/dc/elements/1.1/" 

    xmlns:content="http://purl.org/rss/1.0/modules/content/" 

    xmlns:msxml="urn:schemas-microsoft-com:xslt" 

    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 

    exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets "> 





    <xsl:output method="xml" omit-xml-declaration="yes"/> 


    <xsl:param name="currentPage"/> 

    <!-- Update these variables to modify the feed --> 

    <xsl:variable name="RSSNoItems" select="string('10')"/> 

    <xsl:variable name="RSSTitle" select="string('My sample rss')"/> 

    <xsl:variable name="SiteURL" select="string('http://localhost:58281/news.aspx')"/> 

    <xsl:variable name="RSSDescription" select="string('Add your description here')"/> 


    <!-- This gets all news and events and orders by updateDate to use for the pubDate in RSS feed --> 

    <xsl:variable name="pubDate"> 

    <xsl:for-each select="$currentPage/* [@isDoc]"> 

     <xsl:sort select="@createDate" data-type="text" order="descending" /> 

     <xsl:if test="position() = 1"> 

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

     </xsl:if> 

    </xsl:for-each> 

    </xsl:variable> 

    <xsl:template match="/"> 

    <!-- change the mimetype for the current page to xml --> 

    <xsl:value-of select="umbraco.library:ChangeContentType('text/xml')"/> 

    <xsl:text disable-output-escaping="yes">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</xsl:text> 

    <rss version="2.0" 

    xmlns:content="http://purl.org/rss/1.0/modules/content/" 

    xmlns:wfw="http://wellformedweb.org/CommentAPI/" 

    xmlns:dc="http://purl.org/dc/elements/1.1/" 


     <channel> 

     <title> 

      <xsl:value-of select="$RSSTitle"/> 

     </title> 

     <link> 

      <xsl:value-of select="$SiteURL"/> 

     </link> 

     <pubDate> 

      <xsl:value-of select="$pubDate"/> 

     </pubDate> 

     <generator>umbraco</generator> 

     <description> 

      <xsl:value-of select="$RSSDescription"/> 

     </description> 

     <language>en</language> 

     <xsl:apply-templates select="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1']"> 

      <xsl:sort select="@createDate" order="descending" /> 

     </xsl:apply-templates> 

     </channel> 

    </rss> 

    </xsl:template> 

    <xsl:template match="* [@isDoc]"> 

    <xsl:if test="position() &lt;= $RSSNoItems"> 

     <item> 

     <title> 

      <xsl:value-of select="@nodeName"/> 

     </title> 

     <link> 

      <xsl:value-of select="$SiteURL"/> 

      <xsl:value-of select="umbraco.library:NiceUrl(@id)"/> 

     </link> 

     <pubDate> 

      <xsl:value-of select="umbraco.library:FormatDateTime(@createDate,'r')" /> 

     </pubDate> 

     <guid> 

      <xsl:value-of select="$SiteURL"/> 

      <xsl:value-of select="umbraco.library:NiceUrl(@id)"/> 

     </guid> 

     <content:encoded> 

      <xsl:value-of select="concat('&lt;![CDATA[ ', ./bodyText,']]&gt;')" disable-output-escaping="yes"/> 

     </content:encoded> 

     </item> 

    </xsl:if> 

    </xsl:template> 

</xsl:stylesheet> 
+0

FeedVaidatorでフィード出力を実行することをおすすめします。 XML宣言の前に空白があると、表示されているエラーが発生する可能性があります。 http://feedvalidator.org/docs/error/WPBlankLine.html – Oppositional

+0

@Funky役に立つ回答を受け入れるか、解決方法を自分で回答してください(回答が得意でない場合)。:D –

答えて

5

は、デフォルトでは、すべてのユーザーが作成したテンプレートが順番にDefault.masterという隠しマスターページから継承するマスターページ、として始めます。これは、すべてのテンプレートに<asp:Content>セクションが含まれていることを意味し、XML宣言が開始タグ<asp:Content>の直後に置かれていないと、ソースコードの先頭に空白の行が表示され、記述したエラーが発生します。

通常、この問題は、XML宣言をテンプレートに入れ(以下の2行目を参照して右にスクロールして)、残りのXMLコンテンツを生成するようにしておきます。また

<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %> 
<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server"><?xml version="1.0" encoding="UTF-8"?> 
    <umbraco:Macro Alias="MyRssFeed" runat="server" /> 
</asp:Content> 

、あなただけ<umbraco:Macro>タグがすぐに空白や改行なし<asp:Content>タグを次のテンプレートで確認して、マクロにXML宣言を維持したいならば。あなたはかみそりを使用している場合は、このような改行を置き換えることによって、このエラーを回避することができます

+0

まったく同じ問題を抱えていて、この解決策が私のために働いた!助けてくれてありがとう。人々が答えとして選択しないときには迷惑です。 – csharpforevermore

+0

心配はいりません。それが誰かを助けてくれてうれしい。 :) –

+0

それも私のために解決した、ありがとう! – Marc

2

:このコードスニップの

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage 
@{ 
    Layout = null; 
}<?xml version="1.0" encoding="UTF-8"?> 
@{ 
    umbraco.library.ChangeContentType("text/xml");  
    var siteURL = "http://" + Request.Url.Host.ToString(); 
    var rssPage = CurrentPage.AncestorOrSelf(1).Rss.First(); 
    var articles = CurrentPage.AncestorOrSelf(1).Descendants("Article").OrderBy("date desc"); 
} 
    <rss version="2.0"> 
     <channel> 
      <title>@rssPage.title</title> 
      @Html.Raw("<link>")@[email protected]("</link>") 
      <description>@rssPage.description</description> 
      <pubDate>@String.Format("{0:ddd, dd MMM yyyy HH:mm:ss}", @rssPage.CreateDate)</pubDate> 
      <lastBuildDate>@String.Format("{0:ddd, dd MMM yyyy HH:mm:ss}", DateTime.Now)</lastBuildDate> 
      <language>en</language> 
      <generator>Umbraco</generator> 

      @foreach(var article in articles) 
      { 
       <item> 
        <title>@if(article.HasValue("title")){@article.title}else{@article.Name}</title> 
        @Html.Raw("<link>")@[email protected]@Html.Raw("</link>") 
        <description>@article.previewText</description> 
        <pubDate>@String.Format("{0:ddd, dd MMM yyyy} {1:HH:mm:ss}", @article.date, @article.CreateDate)</pubDate> 
       </item> 
      } 
     </channel> 
    </rss> 

キー部分は、このラインである - 以下の行にそのことを確認します。

}<?xml version="1.0" encoding="UTF-8"?> 
関連する問題