【问题标题】:Android XML Parse Exception all of a suddenAndroid XML Parse Exception 突然
【发布时间】:2012-07-10 01:39:36
【问题描述】:

我的代码昨天运行良好,但我今天再次启动它并收到错误

org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: not well-formed (invalid token)

有问题的 xml 没有任何时髦的字符。它存储在一个名为“xml”的字符串变量中。公平地说,我真的不知道如何处理这个问题,只是在学习一些教程,但这是我的尝试。

out = new PrintWriter(mySocket.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "US-ASCII"));
InputStream is = mySocket.getInputStream();

...
String xml = the stuff that was read in with br.read();
...

SAXParserFactory saxPF = SAXParserFactory.newInstance();
SAXParser saxP = saxPF.newSAXParser();
XMLReader xmlR = saxP.getXMLReader();

DataHandler myDataHandler = new DataHandler();
xmlR.setContentHandler(myDataHandler);
xmlR.parse(new InputSource(new StringReader(xml)));
myData = myDataHandler.getData();

我哪里做错了?

更新:xml以

开头
<?xml version="1.0" standalone="yes"?> 

所以看起来“第 1 行,第 0 列”实际上并没有什么问题。

更新 2:我发现 is.available() 返回 0.... 我该如何解决?

【问题讨论】:

  • 向我们展示xml的内容。 (嗯,至少是开始。)
  • 我强烈怀疑您没有得到任何响应(或部分响应)。我建议记录响应。
  • @GrahamBorland 已更新。您需要查看更多的 xml 吗?
  • @thinksteep 我刚刚添加了一个 System.out.println((char)br.read());在那里,我得到了一些要打印的 xml。但不是全部。
  • 您可以尝试完全重建。有时 Android 会因为这样的东西进入一个时髦的状态......现在比以前少了,但是......

标签: java android xml xml-parsing sax


【解决方案1】:

我不确定到底是什么问题,但我改变了一些东西并且让它有点工作。这是我所做的更改:

我变了

BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "US-ASCII"));
InputStream is = mySocket.getInputStream();

BufferedInputStream in = new BufferedInputStream(mySocket.getInputStream());

我没有在原始问题中包含这个(它是“...”的一部分),但我摆脱了这个条件

if(in.available()>0)

因为它返回 0 即使 read() 工作只是 find 没有它。不过,这可能只是一个临时的破解,我需要弄清楚它为什么返回 0 并找到一个合法的修复...

【讨论】:

    【解决方案2】:

    您需要确保指定您的编码方法。试试:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    

    您始终需要定义如何对数据进行编码,否则您将遇到问题。您可能还想更改此设置:

    BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "US-ASCII"));
    

    到这里:

    BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "utf-8"));
    

    这是一篇很棒的文章,它讨论了指定数据编码方式的重要性:

    http://www.joelonsoftware.com/articles/Unicode.html

    希望这会有所帮助!

    【讨论】:

    • 我已经有了第一行。我也在 br 行中进行了更改,但没有帮助。不过还是谢谢。
    • 你有encoding="utf-8"吗?好像您刚刚拥有:&lt;?xml version="1.0" standalone="yes"?&gt; 您必须在所有 xml 文件中都有 encoding="utf-8"。否则,您将遇到问题。你也可以发布整个 XML 文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多