使用简单的xml序列化程序(v2.6.6),Document没有根元素异常

时间:2012-08-25 07:08:43

标签: java android xml xml-serialization

我正在使用简单的xml库http://simple.sourceforge.net/来从套接字输入流反序列化对象。 虽然在简单的Java应用程序中同样的情况工作正常,在我得到的,在

之后
MyObject obj = serializer.read(MyObject.class,socket.getInputStream())
  

org.simpleframework.xml.stream.NodeException:文档没有root   元件

为什么会这样?

2 个答案:

答案 0 :(得分:0)

您还没有收到数据。尝试设置日志并检查数据是否存在

答案 1 :(得分:0)

自从我在这里的最后一个帖子被删除后,这里再次是我的xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<masterclass>
    <question className="Cosmos">
        <body>What year was the first step on the Moon?</body>
        <answer valid="0">1972</answer>
        <answer valid="0">1971</answer>
        <answer valid="0">1970</answer>
        <answer valid="1">1969</answer>
    </question>
    <question className="Cosmos">
        <body>Who were the first men to walk on the Moon?</body>
        <answer valid="1">Neil Armstrong</answer>
        <answer valid="0">Michael Collins</answer>
        <answer valid="0">Eugene Cernan</answer>
        <answer valid="1">Edwin Aldrin</answer>
    </question>
    <question className="History">
        <body>When did Christening of Poland took place?</body>
        <answer valid="0">1025</answer>
        <answer valid="1">966</answer>
        <answer valid="0">866</answer>
        <answer valid="0">916</answer>
    </question>
    <question className="Math">
        <body>Stone weighs 2kg and half stone. How much stone weighs?</body>
        <answer valid="0">2.5kg</answer>
        <answer valid="0">3kg</answer>
        <answer valid="1">4kg</answer>
        <answer valid="0">5kg</answer>
    </question>
</masterclass>

这是解组xml文件的代码

// download successed
try {
    Serializer xmlSer = new Persister();
    InputStream fis = new FileInputStream(xmlFilePath);
    BufferedReader in = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
    MasterClass mc = xmlSer.read(MasterClass.class, in);
    MasterClass mc = xmlSer.read(MasterClass.class, str);
    Toast.makeText(context.get(), ""+mc.getQuestionList().size(),
        Toast.LENGTH_LONG).show();
} catch (Exception ee) {
    Log.e("MasterClass", "xml serialize problem", ee);
}

该行中有错误:

MasterClass mc = xmlSer.read(MasterClass.class, in);

更改为此:

String str = "", s;
while((s = in.readLine()) != null) {
    str += s;
    //Log.d("MasterClass", str);
}
MasterClass mc = xmlSer.read(MasterClass.class, str);

它开始工作。 不知道为什么,但是根据我的研究,这可能与文件在设备上的保存方式有关

OutputStream fos = new FileOutputStream(outputFile);
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
br.write(content);
br.flush();
br.close();

和xml文件编码-在记事本++中设置为无BOM的UTF-8。

要修改:不确定如何删除,请在下面删除我的问题,tks:)