为什么这段代码会一直触发SaxParseException:“”PI不能以xml开头“?

时间:2011-02-14 01:33:23

标签: android xml saxparseexception

此代码用于从String表示生成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;
    }
}

6 个答案:

答案 0 :(得分:16)

感谢大家的帮助。

我放弃了清除此错误的<?xml version="1.0" encoding="utf-8"?>。仍然不明白这可能是什么原因,但它仍然有效。

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

感谢大家的帮助!

答案 1 :(得分:3)

您可以检查您的xml文件是否包含BOM表标题

答案 2 :(得分:3)

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

答案 3 :(得分:2)

正如@StaxMan所说,删除之前的任何未知字符

responseBody = responseBody.substring(responseBody.indexOf(“&lt;”));

答案 4 :(得分:1)

这个问题也会因为行&lt; ?xml version =“1.0”encoding =“UTF-8”?&gt;与同一行中的xml数据一起......

  

<强>&LT; ?xml version =“1.0”   编码= “UTF-8” &GT;吗&LT; secciones&GT;&LT; seccion&GT;&LT; ID&GT; 0℃; / ID&GT;&LT;农布雷&GT;&拉波尔塔达LT; feedURL&GT; HTTP://iphone.elnorte.com/libre/online07/a   ....

答案 5 :(得分:0)

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

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