- ベストアンサー
XML宣言でエラーが発生する問題の対処法
- xmlの宣言でエラーになってしまいます。xmlの宣言でエラーになってしまいます。x-servletを導入して携帯サイトを構築しています。携帯用のgoogle googleAnalyticsも導入するのにxml宣言を先頭に記述すると、
- システムエラーが発生しました。エラーメッセージによると、xmlns属性で指定したDTDの実行エラーが原因のようです。
- エラーが表示されている原因は、DOCTYPE宣言とXML宣言の相互作用です。DOCTYPE宣言はXML宣言の前に配置する必要があります。そのため、DOCTYPE宣言を先頭に移動することでエラーを解消できる可能性があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 「XML宣言のエラー」と「DOCTYPE宣言のエラー」は分けて考えてください。 ・IE8- は application/xhtml+xml をサポートしていません。(IE9はわかりません) ・IE8- は text/html をHTML文書として扱います。 ・IE8- は application/xml, text/xml をXML文書として扱います。 > XML ページを表示できません > スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 IE8- はこの文書を「XML文書」として扱っています。 > システム エラー: -2146697210 リソース 'http://ドメイン/i-xhtml_4ja_10.dtd' の実行エラーです。 IE8- は適切なDTDを見付けられていません。 文書型宣言の意味 -- ごく簡単なHTMLの説明 http://www.kanzaki.com/docs/html/doctype.html#systemid > <?xml version="1.0" encoding="Shift_JIS"?> ←※コメントアウトするとエラーが出ない おそらく、IE8- はXML宣言を入れると XML文書 として扱い、XML宣言を外すとHTML文書と扱っています。 解決法は2つあると思います。 ■IEにHTML文書として解釈させる PHPか .htaccess で正しいContent-Typeヘッダを出力してください。 // IE以外 Content-Type: application/xhtml+xml; charset=Shift_JIS; // IE Content-Type: text/html; charset=Shift_JIS; HTML 5 を application/xhtml+xml で配信すれば Fx2, Fx3 でも問題なく解析される | ヨモツネット http://www.yomotsu.net/wp/?p=531 ■XML文書として解釈させる まず、DTDは自分で作成して適当なURIに置きます。 そして、IE向けに適当なContent-Typeヘッダを出力します。 // IE以外 Content-Type: application/xhtml+xml; charset=Shift_JIS; // IE Content-Type: application/xml; charset=Shift_JIS; 最後にトリックを使って、IEにXML文書として扱わせます。(XHTML5でも使えるそうです) XHTML Frequently Answered Questions(私的日本語訳) - Software Linkage http://past.openvista.jp/blog/documents/W3C/XHTML_FAQ/#ie
その他の回答 (2)
- think49
- ベストアンサー率59% (285/482)
> <?xml version="1.0" encoding="Shift_JIS"?> ←※コメントアウトするとエラーが出ない PHPの宣言ブロックと判断されていませんか? <?php echo('<?xml version="1.0" encoding="Shift_JIS"?>') ?> と書く必要があるともうのですが…。 XML宣言とDOCTYPE宣言を記載 http://css.uka-p.com/xhtml/declare.html > システム エラー: -2146697210 リソース 'http://ドメイン/i-xhtml_4ja_10.dtd' の実行エラーです。 そもそも、正式なDTDが存在するのでしょうか? iモード対応XHTMLのバージョン http://www.nttdocomo.co.jp/service/imode/make/content/browser/xhtml/about/ ドコモ iモードサイト作成時のHTML DOCTYPEまとめ 携帯サイトを作ろう! -ちょっと詳しいモバイルサイトの作り方- http://dspt.blog59.fc2.com/blog-entry-37.html nttdocomo.co.jp でさえ、システム識別子にURIを指定していない記述です。 docomo的には、「必要なら自前でDTDを書いてください」とか「IEには別のDTDを宣言してください」って事なのかなあ…。
補足
>そもそも、正式なDTDが存在するのでしょうか? xmlを宣言してdtdの識別子が確認できない事でIEではエラーが出てしまうという事でしょうか? もし正式なdtdが存在しない場合IEのブラウザ上でプレビューを確認する事はできないのでしょうか? 別でdtdを作成して設置してそのフルパスを書いておけば認識はしてくれるのでしょうか? 質問ばかりで申し訳ありません。いろいろ自分なりに調べてはいるのですがそれらしい答えには辿りつけず。是非ご教示お願いします。
- Yune-Kichi
- ベストアンサー率74% (465/626)
DTDのシステム識別子はURIなので,示されたURIにDTDファイルが存在しなければいけません。 # XHTML 1.0で同じ罠がありました。 IEは該当文書をXMLとして解釈したため,きっちりとDTDによる妥当性の検証を行おうとして,DTDが見つからずにエラーとなっています。 DTDのシステム識別子を本来のURIにするか,該当DTDを同じディレクトリに置くことで,IEでも見られるはずです。 # XML扱いされそうな気はしますが。
お礼
dtdを作成する事も考えましたが、とりあえずIEでのプレビューができればいい(厳密に携帯ブラウザでの見え方とは違っていても)ので、 今回はIEで表示する際にはxmlとして解釈させないようにしました。 ただ、xmlの宣言は外せないのでそれ以外の場合は宣言文を挿入するようにしました。 大変細かい説明で助かりました。今回の件でブラウザ間での解釈の違いやdtdについて改めて勉強になりました。 躓きはしましたがいい経験になりました。ご丁寧にご教示くださったみなさんありがとうございました。