8

このコードは、文字列表現からXMLドキュメントを生成するために使用されます。小さな単体テストでは正常に機能しますが、実際のxmlデータでは失敗します。それがトリガーするラインはDocument doc = db.parse(is);

何か案は?

public static Document FromString(String xml)
{
    // from http://www.rgagnon.com/javadetails/java-0573.html
    try
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xml));

        Document doc = db.parse(is);
        doc.normalize();

        return doc;
    }
    catch (Exception e)
    {
        Log.WriteError("Failed to parse XML", e, "XML.FromString(String)");
        return null;
    }
}
4

6 に答える 6

16

皆様のご協力に感謝いたします。

<?xml version="1.0" encoding="utf-8"?>このエラーをクリアしたを破棄しました。これの理由が何であるかはまだわかりませんが、それでも機能しました。

バッファリングされたライターの1つ(zipファイルからメモリに抽出するとき)がフラッシュされていないことがわかりました。これにより、xml文字列が不完全になりました。

皆さんの助けに感謝します!

于 2011-02-14T12:32:14.773 に答える
3

PHPによって生成されたXMLを解析しているときに、同じ問題が発生しました。ContentTypeヘッダー「text/xml」を追加した後、それは魅力のように機能します。

于 2011-09-13T22:09:07.817 に答える
3

xmlファイルにBOMヘッダーがあるかどうかを確認できます

于 2011-06-14T15:49:20.860 に答える
2

@StaxManが言ったように、前に不明な文字を削除します

responseBody = responseBody.substring(responseBody.indexOf( "<"));

于 2012-07-07T02:45:51.820 に答える
1

この問題は、<?xml version = "1.0" encoding = "UTF-8"?>という行とxmlデータを同じ行に含めることによっても発生します。

<?xml version = "1.0" encoding = "UTF-8"?> <secciones> <seccion> <id> 0 </ id> <nombre> Portada <feedURL> http://iphone.elnorte.com/libre/ online07 /a...。

于 2012-07-13T17:56:38.613 に答える
0

xml行を破棄するのではなく、ファイルのエンコーディングを確認する必要があります。

私のEclipse(Windows上)には、Unix-U8としてエンコードされたリソースで同じ問題が発生していることがわかりました。DOS-U8に変換した後、エラーはなくなりました。

于 2012-06-03T13:09:17.903 に答える