Android 为什么这段代码会不断触发SaxParseException:"&引用;PI不能以xml开头;?
此代码用于从XML文档的字符串表示形式生成XML文档。它在我的小型单元测试中运行良好,但在实际的xml数据中失败。它触发的行是Android 为什么这段代码会不断触发SaxParseException:"&引用;PI不能以xml开头;?,android,xml,saxparseexception,Android,Xml,Saxparseexception,此代码用于从XML文档的字符串表示形式生成XML文档。它在我的小型单元测试中运行良好,但在实际的xml数据中失败。它触发的行是documentdoc=db.parse(is) 有什么想法吗 public static Document FromString(String xml) { // from http://www.rgagnon.com/javadetails/java-0573.html try { DocumentBuilderFactory
documentdoc=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;
}
}
谢谢大家的帮助
我丢弃了清除此错误的
。我仍然不明白这可能是什么原因,但它仍然有效
我接着发现我的一个缓冲写入程序(从zip文件提取到内存中时)没有被刷新,这导致xml字符串不完整
谢谢大家的帮助 您可以检查您的xml文件是否有BOM头我在解析PHP生成的xml时遇到了相同的问题。
在我添加ContentType标题“text/xml”后,它就像一个符咒一样工作。您应该检查文件的编码,而不是丢弃xml行
我发现我的Eclipse(在Windows上)与编码为Unix-U8的资源存在相同的问题。将其转换为DOS-U8后,错误消失。正如@StaxMan所说的,在转换之前删除任何未知字符
responseBody=responseBody.substring(responseBody.indexOf(“此问题也将由行与xml数据在同一行中引起
0 Portadahttp://iphone.elnorte.com/libre/online07/a
它可能不是您的代码,而是“XML”“您正在加载并试图解析的字符串。如果它不是XML,则当遇到诸如未关闭的元素、无效字符等情况时,它将引发解析异常。异常说明了什么?您是否针对外部源测试了XML以确保其有效?在异常中发现以下消息:“PI不能以xml开头(位置:未知xm@1:5在java.io中。StringReader@4625d540) 我不确定这意味着什么,因为我很确定第一个字符的开头通常是这样的,如果在XML声明之前有额外的空格,则不允许这样做;如果有XML声明,则它必须在没有任何前导空格的情况下开始。另一方面,处理指令(PI)的目标名称不允许为“XML”,因此出现错误消息。如果您使用错误的编码从流中读取字符串,您也可以得到此消息。嗨,Kurru,您是如何讨论声明的?您使用了转换器或子字符串还是什么?我已经为此挣扎了一段时间…有几种方法可以做到这一点,我想因为我可以依赖格式,所以我刚刚扔掉了代码的第1行。您也可以尝试根据第1个>symbolThanks对其进行子字符串。对于回答,我最终使用了子字符串方法。@CrimsonChin请随意向上投票我的答案作为奖励:P向上投票的评论恐怕不会得到rep!将字符串添加到变量后,我刚刚使用了xml=xml.replace(“,”);
然后错误就消失了