1. ホーム
  2. xml

[解決済み] 有効なXMLファイルにはXML宣言が必要ですか?

2022-07-13 01:40:36

質問

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 宣言 では encodingstandalone はいずれも省略可能です。ただ 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 を編集することが、本当の問題なのです!