1

かみそりを使用してumbracoのブログに対してRSSフィードを作成する際に問題が発生しました。以下のコードは機能しますが、アイテムノードの下のリンクタグに値を追加しようとすると、xmlエラーが発生します。以下のコードがあります。

<rss version="2.0">
    <channel>
        <title>@landing.uBlogsyRssTitle</title>
        <description>@landing.uBlogsyRssDescription</description>
        <copyright>@landing.uBlogsyRssCopyright</copyright>
        @*<image>@landing.uBlogsyRssImage</image>*@
        <link>@Request.Url.Host@landing.Url</link>
        <lastBuildDate>@lastPubDate.FormatDateTime("ddd, dd MMMM yyyy HH:mm:ss")</lastBuildDate>
        <pubDate>@lastPubDate.FormatDateTime("ddd, dd MMMM yyyy HH:mm:ss")</pubDate>
        @foreach (var p in posts)
        {
        <item>
            <title>@p.GetProperty("uBlogsyContentTitle").Value</title>            
            <link></link>
            <author>@p.GetProperty("uBlogsyPostAuthor").Value</author>
            <description>@p.GetProperty("uBlogsyContentBody").Value.StripHtml().Trim()</description>            
            <guid>@p.Url</guid>
            <pubDate>@p.GetProperty("uBlogsyPostDate").Value.FormatDateTime("ddd, dd MMMM yyyy HH:mm:ss")</pubDate>
        </item>
        }
</channel>
</rss>
4

1 に答える 1

4

これは、同じ問題が解決された別の投稿に対する私の回答です。

MVC4 Razor は、書き込もうとしているものが有効な HTML であることを検証します。そうしないと、Razor は失敗します。

あなたのコードは間違った HTML を書き込もうとしました:

w3schools の link タグのドキュメントを見ると、同じことをさまざまな方法で表現できます。

  • 「要素は空の要素です。属性のみが含まれています。」
  • 「HTML では、タグに終了タグがありません。」

これが意味することは、リンクがシングルトン タグであるため、このタグを次のように自己終了タグとして記述する必要があるということです。

<link atrib1='value1' attrib2='value2' />

したがって、あなたがやろうとしていたことを行うことはできません: 内容を含む開始タグと終了タグを使用してください。

そのため、Razor はこの<xml>ドキュメントを生成できません。

しかし、Razor を欺く方法が 1 つあります。次のように、タグを書いていることを Razor に知らせないでください。

@Html.Raw("<link>")--your link's content--@Html.Raw("</link>")

Razor は HTML を記述するためのものであるため、それを使用して XML を記述するのはややこしい場合があることに注意してください。

于 2013-02-25T00:31:15.290 に答える