2

リンク (URL) が XML ファイル (RSS フィード) を指しているか、通常の HTML ファイルを指しているかをヘッダーを見るだけで判断できる必要があります。

そこで私に良いアドバイスはありますか?:)

ありがとう!ローイ

4

7 に答える 7

11

完全な POST/GET の代わりに HEAD リクエストを実行できます

これにより、コンテンツ タイプを含む必要があるそのページのヘッダーが取得されます。そこから、text/html か xml かを区別できるはずです。

ここにSOの良い例があります

于 2009-05-25T10:01:47.073 に答える
5

System.NetEoin Campbell の応答に続いて、機能を使用して正確にそれを行うコード スニペットを次に示します。

using (var request = System.Net.HttpWebRequest.Create(
    "http://tempuri.org/pathToFile"))
{
    request.Method = "HEAD";

    using (var response = request.GetResponse())
    {
        switch (response.ContentType)
        {
            case "text/xml":
                // ...
                break;
            case "text/html":
                // ...
                break;
        }
    }
}

もちろん、これは Web サーバーがコンテンツ (MIME) タイプを正しく公開していることを前提としています。しかし、これを行う帯域幅効率の高い方法が必要だと述べたので、すべてのマークアップをダウンロードして分析したくないと思います! 正直なところ、コンテンツ タイプは通常、どのような場合でも正しく設定されています。

于 2009-05-25T10:05:00.123 に答える
2

ヘッダーを使用して、Content-Type帯域幅を節約するために、Web サーバーにドキュメントの指定された部分を提供させることができます。サーバーのAccept-Ranges: bytes応答にヘッダーが含まれている場合、 を使用Range: bytes=0-10して最初の 10 バイトのみをダウンロードできます (または何もダウンロードしないようにすることもできます)。

HEADの代わりに動詞も調べますGET

于 2009-05-25T10:01:00.850 に答える
1

HttpWebResponse オブジェクトのヘッダーを確認してください。Content-Type ヘッダーは、XML/RSS ドキュメントの場合は text/xml を、標準の Web ページの場合は text/html を読み取る必要があります。

于 2009-05-25T10:06:33.053 に答える
0

URLを見ただけでは、ファイルの種類がわかりません。

要求したドキュメントの MIME タイプを確認するか、最初の行を読んで、作成者が Doctype を入力していることを確認することをお勧めします。

于 2009-05-25T10:01:40.490 に答える
0

一般的に言えば、これは不可能です。これは、HTML ファイルまたは XML ファイルのいずれかをアプリケーション/オクテット ストリームとして提供できる (役に立たない) ためです。また、他の人が指摘したように、複数の有効な XML MIME タイプがあります。ただし、HEAD リクエストとコンテンツ タイプ チェックが機能する場合があります。

WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
req.Method = "HEAD";
String contentType = resp.ContentType;

if(contentType == "text/xml")
  getXML(url);
else if(contentType == "text/html")
  getHTML(url);

ただし、どちらかの方法で処理する場合は、次のことができます。

WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
String contentType = resp.ContentType;

if(contentType == "text/xml")
  processXML(resp.GetResponseStream());
else if(contentType == "text/html")
  processHTML(resp.GetResponseStream());
else
  // process error condition

ファイルは必要に応じてダウンロードされることに注意してください。したがって、応答オブジェクトを要求するだけでは、ファイル全体がダウンロードされるわけではありません。

于 2009-05-25T10:11:50.143 に答える
-3

「テキスト」リーダーで読むだけです。次に、たとえば、頭に浮かぶいくつかのタグを探して、どれが最適かを決定します;)次に、実際のリーダーにそれをチャックします。

それとも単純すぎますか?

于 2009-05-25T10:00:06.420 に答える