0

XML ファイルを次のようなドキュメントに変換しようとしています。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("C:/xml/41111208890622000144550010000000011000003066-nfe.xml"); 
Document document = db.parse(new InputSource(new StringReader("C:/xml/41111208890622000144550010000000011000003066-nfe.xml")));

しかし、それはエラーメッセージを出しています:

Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1;

誰かが何をすべきか知っていますか?

4

1 に答える 1

4

現在、文字列を含むリーダーを作成しています

"C:/xml/41111208890622000144550010000000011000003066-nfe.xml"

DocumentBuilder明らかに XML ではないのに、あたかも XML であるかのように解析するように に依頼します。(私は 2 番目のparse呼び出しを参照していますが、これは実際のコードにあると思われます。提供したコードは、2 回宣言したようにコンパイルされませんdocument。)

を作成するFileInputStreamか、おそらくそれInputStreamReaderをラップすることができます。

String filename = "C:/xml/41111208890622000144550010000000011000003066-nfe.xml";
try (FileInputStream input = new FileInputStream(filename))
{
    Document document = db.parse(new InputSource(input));
}

(ストリームを直接使用することを好み、パーサーにエンコーディングを検出させます。)

今この呼び出し:

Document document = db.parse("C:/xml/...");

-を使用すると、ほぼ動作し、実際に動作する可能性があります。これは、ファイル名を URI として処理できるDocumentBuilder.parse(String)かどうかに依存します。parse(これで問題ない XML API とそうでない XML API を見てきました。) うまくいかない場合は、次のfile://スキームを試してみてください。

Document document = db.parse("file://C:/xml/...");
于 2013-07-30T15:12:42.750 に答える