カスタムXMLファイルを取得して解析するプログラムをJavaで記述しています。ストレージにXMLファイルを使用しています。 Eclipseで次のエラーが表示されます。
[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog.
at com.Sun.org.Apache.xerces.internal.parsers.DOMParser.parse(DOMParser.Java:239)
at com.Sun.org.Apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.Java:283 )
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.Java:208)
at me.ericso.psusoc.RequirementSatisfier.parseXML(RequirementSatisfier.Java:61)
at me.ericso.psusoc.RequirementSatisfier.getCourses(RequirementSatisfier.Java:35)
at me.ericso.psusoc.programs.RequirementSatisfierProgram.main(RequirementSatisfierProgram.Java:23 )
XMLファイルの先頭が含まれています。
<?xml version="1.0" ?>
<PSU>
<Major id="IST">
<name>Information Science and Technology</name>
<degree>B.S.</degree>
<option> Information Systems: Design and Development Option</option>
<requirements>
<firstlevel type="General_Education" credits="45">
<component type="Writing_Speaking">GWS</component>
<component type="Quantification">GQ</component>
プログラムはXMLファイルを読み取ることができますが、DocumentBuilder.parse(XMLFile)
を呼び出して解析されたorg.w3c.dom.Document
を取得すると、上記のエラーが発生します。
XMLファイルのプロローグに無効なコンテンツがあるとは思えません。何が悪いのかわかりません。助けてください。ありがとう。
Xmlファイルにこのようなジャンク文字があるかどうかを確認してください。存在する場合は、次の構文を使用して削除してください。
String XString = writer.toString();
XString = XString.replaceAll("[^\\x20-\\x7e]", "");
これもこの問題の解決策だと思います。
ドキュメントの種類を'UTF-8でエンコード'から'BOMなしでUTF-8でエンコード'に変更します
同じ変更を行うことで問題を解決しました。
XMLファイルの先頭に非表示の空白がないことを確認してください。また、ノードにencoding = "UTF-8"(または16?手掛かりなし)を含めることもできます。
ドキュメントは見た目はきれいですが、目に見えない文字が含まれていると思われます。 16進エディタで開き、最初の「<」の前に実際に何もないことを確認します。 XMLヘッダーのスペースがスペースであることを確認してください。 「?>」の前のスペースを削除してください。使用されている改行を確認してください。
ドキュメントが適切なUTF-8であることを確認してください。一部のWindowsエディターは、ドキュメントをUTF-16として保存します(つまり、2バイトごとに0です)。
ファイルの正しいアドレスを提供していません。 C:/Users/xyz/Desktop/myfile.xml
などのアドレスを指定する必要があります
適切なxmlエンコーディングとSchemaとのマッチングがあると思います。
それでもこのエラーが発生する場合は、使用したxmlと入力タイプを非整列化するコードを確認してください。 XMLドキュメントは独自のエンコーディングを宣言するため、XMLプロセッサが宣言されたエンコーディングを正しく処理できるように、ReaderではなくInputStreamからStreamSourceオブジェクトを作成することをお勧めします[参照帳:Java A Nutshell]
お役に立てれば!
Xmlファイルを制御できる場合は、ファイルの先頭にもう少し情報を追加してみてください。
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
XMlファイルの構文の問題を確認します。 Cocoonを使用してxsl/xspで作業しているときにこのエラーが見つかり、存在しないノードまたはそのようなものを使用して変数を定義しています。 XML全体を確認してください。