Xml

有効なXMLファイルにはXML宣言が必要ですか?



Does Valid Xml File Require An Xml Declaration



解決:

XML 1.0では、 XML宣言オプション 。 XML 1.0勧告のセクション2.8を参照してください。ここでは、「使用する必要がある」と記載されています。つまり、推奨されていますが、必須ではありません。ただし、XML 1.1では、宣言は次のようになります。 必須 。 XML 1.1勧告のセクション2.8を参照してください。ここには、「MUST」を使用する必要があると記載されています。それはさらに次のように述べています もしも 宣言はありません。これは、ドキュメントがXML1.0ドキュメントであることを自動的に意味します。

に注意してください XML宣言 NSエンコーディングとスタンドアロンはどちらもオプションです。のみバージョンは必須です。また、これらは属性ではないため、存在する場合は次の順序である必要があります。バージョン、その後に任意のエンコーディング、その後に任意のスタンドアロン。



  

この方法でエンコーディングを指定しない場合、XMLパーサーは使用されているエンコーディングを推測しようとします。 XML 1.0勧告では、文字エンコードを自動検出できる1つの方法について説明しています。実際には、入力がUTF-8、UTF-16、またはUS-ASCIIとしてエンコードされている場合、これはそれほど問題にはなりません。 US-ASCII範囲外の文字を使用する8ビットエンコーディング(ISO 8859-1など)が検出された場合、自動検出は機能しません。可能であれば、これらを作成しないでください。

NSスタンドアロンは、XMLドキュメントがDTDなしで正しく処理できるかどうかを示します。人々はめったにそれを使用しません。最近では、DTDなしで情報が欠落しているXML形式を設計するのは悪いことです。



アップデート:

「プロローグエラー/無効なutf-8エンコーディング」エラーは、ファイル内でパーサーが検出した実際のデータが、XML宣言で示されているエンコーディングと一致しなかったことを示します。または、ファイル内のデータが自動検出されたエンコーディングと一致しない場合もありました。

ファイルにはバイト順マーク(BOM)が含まれているため、UTF-16エンコーディングである必要があります。あなたの宣言はNotePadによってファイルがUTF-16に変更された場合、これは明らかに正しくありません。簡単な解決策は、エンコードして簡単に言う。編集して言うこともできますencoding = 'UTF-16'ですが、元のファイル(UTF-16にはなかった)や、ファイルが何らかの理由でUTF-8またはその他のエンコーディングに戻された場合は間違っています。



わざわざBOMを削除しようとしないでください。これは、問題の原因ではありません。 NotePadまたはWordPadを使用してXMLを編集することは、本当の問題です。


Xml宣言はオプションであるため、XMLはそれなしで整形式になります。ただし、特に使用されるエンコーディングに関して、パーサーによって誤った仮定が行われないように、これを使用することをお勧めします。


のデフォルト値を使用していない場合にのみ必要ですバージョンとエンコーディング(その例では)。