[解決済み] 有効なXMLファイルにはXML宣言が必要ですか?
質問
XercesのSax Parserを使ってXMLファイルをパースしています。
XML宣言は
<?xml version="1.0" encoding="UTF-8"?>
は必要ですか?
どのように解決するのですか?
XML 1.0では XML 宣言 は 任意 . 参照 XML 1.0 勧告 の 2.8 節を参照してください。 を参照してください。そこでは "should" be used と書かれており、これは推奨されるが必須ではないことを意味します。しかし、XML 1.1では、この宣言は 必須 . 参照 XML 1.1 勧告の 2.8 節を参照してください。 を参照してください。そこでは "MUST" が使用されなければならないと書かれています。さらに、次のように記述されています。 もし 宣言がない場合、その文書は自動的に XML 1.0 文書であることを意味します。
において
XML 宣言
では
encoding
と
standalone
はいずれも省略可能です。ただ
version
だけが必須です。また、これらは属性ではないので、存在する場合はこの順序でなければなりません。
version
の順で、その後に任意の
encoding
の後に、任意の
standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
この方法でエンコーディングを指定しない場合、XMLパーサーはどのようなエンコーディングが使われているかを推測しようとします。XML 1.0 勧告では、次のような方法が説明されています。 文字エンコーディングの自動検出 . 実際には、入力が UTF-8、UTF-16、または US-ASCII としてエンコードされている場合、これはあまり問題ではありません。US-ASCII の範囲外の文字を使用する 8 ビットエンコーディング (例: ISO 8859-1) に遭遇した場合、自動検出は機能しません -- 可能であれば、これらの作成を避けてください。
は
standalone
は、XML文書がDTDなしで正しく処理できるかどうかを示します。人々はこれをほとんど使いません。最近では、DTDなしで情報が欠落したXML形式を設計することは悪いことです。
更新してください。
prolog error/invalid utf-8 encoding" のエラーは、パーサーがファイル内で見つけた実際のデータが、XML 宣言が言うエンコーディングと一致しないことを示します。または、いくつかのケースでは、ファイル内のデータが自動検出されたエンコーディングと一致しませんでした。
ファイルにはバイト オーダー マーク (BOM) が含まれているので、UTF-16 エンコーディングであるべきです。私は、あなたの宣言が
<?xml version="1.0" encoding="UTF-8"?>
となっており、NotePadによってファイルがUTF-16に変更された場合、明らかに不正確です。簡単な解決策は
encoding
を削除し、単に
<?xml version="1.0"?>
. また、次のように編集することもできます。
encoding="UTF-16"
というように編集することもできますが、これは元のファイル (UTF-16 ではなかった) や、ファイルが何らかの理由で UTF-8 や他のエンコーディングに戻された場合には、間違っていることになります。
BOM を削除しようと悩む必要はありません -- それは問題の原因ではありません。NotePad や WordPad を使用して XML を編集することが、本当の問題なのです!
関連
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] XMLの<![CDATA[]]>は何を意味するのですか?
-
[解決済み] XMLを解析して、特定のノード属性のインスタンスをカウントするには?
-
[解決済み] XML文書でエスケープする必要がある文字は何ですか?
-
[解決済み] cURL コマンドラインを使用して XML ファイルを POST
-
[解決済み] foo "を含む属性を選択するための正しいXPathは何ですか?
-
[解決済み] DTDやXSDからサンプルXMLドキュメントを生成する方法は?
-
[解決済み] ある要素のn番目のインスタンスを取得するためのXPathクエリ
-
[解決済み] XMLの属性値で二重引用符をエスケープするには?
-
[解決済み] SVG テキストの自動改行
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SAXParseException: ルート要素に続くドキュメント内のマークアップは、うまく処理されなければなりません。
-
[解決済み] Googles IMPORTXMLが「インポートされたコンテンツは空です」エラーを返す
-
[解決済み] XMLでタグのブロックをコメントアウトするにはどうすればよいですか?
-
[解決済み] Linearレイアウトでボタンを中央に配置する
-
[解決済み] T-SQLでXML文字列の属性にある二重引用符をエスケープするにはどうすればよいですか?
-
[解決済み] XMLで属性値を取得する
-
[解決済み] XMLの属性値で二重引用符をエスケープするには?
-
[解決済み] XMLコマンドライン処理のためのGrepとSedの等価版
-
[解決済み] Vim で一致する XML タグにジャンプする
-
[解決済み] Ubuntu 11.04でRパッケージがインストールできない [非公開]