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"?>清除此错误的。仍然不明白这可能是什么原因,但它仍然有效。

我继续发现我的一个缓冲编写器(从 zip 文件中提取到内存时)没有被刷新,这导致 xml 字符串不完整。

感谢大家的帮助!

于 2011-02-14T12:32:14.773 回答
3

您可以检查您的 xml 文件是否有 BOM 标头

于 2011-06-14T15:49:20.860 回答
3

我在解析 PHP 生成的 XML 时遇到了同样的问题。在我添加 ContentType 标头“text/xml”后,它就像一个魅力。

于 2011-09-13T22:09:07.817 回答
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/在线07/a ....

于 2012-07-13T17:56:38.613 回答
0

您应该检查文件的编码而不是丢弃 xml 行。

我发现我的 Eclipse(在 Windows 上)与编码为 Unix-U8 的资源有同样的问题。将其转换为 DOS-U8 后,错误消失了。

于 2012-06-03T13:09:17.903 回答