web-dev-qa-db-ja.com

ブラウザがXMLファイルを空白ページとして表示するのはなぜですか?

XMLファイルを開くたびに、タグツリーではなく空白のページが表示されます。ファイル自体は正しく、問題なく読み込まれます。[ソースの表示]またはFirebugで確認できます。すべてのアドオンをオフにしてFirefoxをセーフモードで実行してみましたが、問題は解決しませんでした。

私はどういうわけか私の設定を台無しにしたと思います、そしてFirefoxは今XMLファイルをHTMLファイルとしてレンダリングしようとします。私はグーグルで試しましたが、成功しませんでした。助けてください?

UPD:サンプルファイル: http://lj.lain.ru/3/1273657698603.sample.xml また、なんとかして、マシン上のすべてのブラウザが同じように動作していることに気づきました。私はそれに応じて質問を変更しています

7
n1313

XMLファイルの形式が正しくない場合、ブラウザはそれをどうするかを認識できず、私の経験では何も表示されません。

XMLファイルがvalidの場合、ほとんどのブラウザー(IE8、ChromeおよびFirefox)はThis XML file does not appear to have any style information associated with it. The document tree is shown below.のようなメッセージを表示し、XMLファイルを表示するための特別なモードに入りますコードブロックを折りたたむことができるなどの機能。

ここを見てください: XML Validator

3
Alan Whitelaw

私はちょうど同じような問題を取得して解決しました:私のASP.NET MVCアプリケーションから、WebブラウザーでDOMツリーとして表示したい生のXMLを返すコントローラーがあります。

Chromeは問題なく動作しますが、IE 11は単に空白ページを表示します。

問題は「Content-Type」HTTPヘッダーのようです:charset値が含まれていない場合、IEは単に空白ページを表示します(Content-Dispositionがない限りヘッダー、その場合IEはXMLを保存することを提供します)

したがって、次のHTTP応答はChromeでは問題ありませんが、IEは空白のページを表示します。

HTTP/1.1 200 OK
Cache-Control: private, s-maxage=0
Content-Type: application/xml
Server: Microsoft-IIS/8.0
Date: Fri, 25 Jul 2014 14:29:02 GMT
Content-Length: 693

<?xml version="1.0" encoding="utf-16"?><data>...</data>

注:正しいContent-Lengthを指定してください。ただし、Content-Lengthヘッダーがないか、値が間違っている場合の動作はテストしていません。また、IISによって生成されたX-ヘッダーをこの印刷出力から削除しましたが、そのままにしても問題ありません。


しかし、次のIEとChromeの両方で機能しますか:

HTTP/1.1 200 OK
Cache-Control: private, s-maxage=0
Content-Type: application/xml; charset=utf-8
Server: Microsoft-IIS/8.0
Date: Fri, 25 Jul 2014 14:29:02 GMT
Content-Length: 693

<?xml version="1.0" encoding="utf-16"?><data>...</data>

唯一の違いは、Content-Typeヘッダーに; charset=utf-8が追加されていることです。

ASP.NET MVC開発者にとって、これは生のXMLをレンダリングしてIEをサポートする場合、以下を使用できないことを意味します。

string xmldata = ...
return this.File(Encoding.UTF8.GetBytes(xmldata), "application/xml");

代わりに、以下が機能します。

string xmldata = ...
Response.ContentType = "application/xml";
Response.ContentEncoding = Encoding.UTF8;
Response.AddHeader("Content-Length", Convert.ToString(xmldata.Length));
return this.Content(xmldata);

敬具。

3
codetuner

他の人が書いたものに加えて、一部/ほとんどのウェブブラウザは、XML 1.1標準に従って書かれたxmlファイルをレンダリングできません

Firefoxは、xmlプロローグにバージョン1.1を指すエラーメッセージを表示します。

<?xml version="1.1"?>
---------------^

Internet Explorerは空白のページを表示します。

ソフトウェア開発者であれば、XML 1.1のサポートの欠如はWebブラウザーだけに限定されないことに注意してください。また、多くのプログラミング言語ではXML 1.1のサポートが不足しています。 (つまり、Java 8のデフォルトのDOMパーサーはXML 1.1をサポートしていません。)必要に応じて、XMLバージョン1.0をそのまま使用することもできます。

もちろん、XMLファイルからプロローグを削除することもできます。しかし、それは常にうまくいくとは限りません。 (つまり、xmlノードには、バージョン1.0で禁止されていた特定の制御文字を含めることができます)。

0
bvdb

これはFirefoxに固有のものですが、一見の価値があると思います。

FirefoxメニューのHelp\Troubleshooting Informationに移動し、ボタンをクリックして、プロファイルが含まれているフォルダーを開きます。

MimeTypes.rdfファイルをバックアップしてから削除し、Firefoxのすべてのインスタンスを閉じて、Firefoxを再度開きます。

これにより、FFは認識しているMIMEタイプのデフォルトアクションを再生成するように強制されます。これは、奇妙なFFが何かしていることが原因である場合、問題を修正する可能性があります。

0
ChrisB

Xmlの上部に、これと同様のタグがありますか?

<?xml version="1.0"?>

これでブラウザが準備され、何をすべきかがわかります。

0
nhutto

サーバーからXMLをロードする場合は、ヘッダーコンテキストタイプをtext/xmlに設定する必要があります。

たとえば、PHPでは、これをテキスト出力の前に置く必要があります。

header("Content-type: text/xml");
0
Brian