【问题标题】:Monodroid: Document element did not appearMonodroid:文档元素没有出现
【发布时间】:2013-08-06 08:32:56
【问题描述】:

我正在尝试将 XML 文件反序列化为我使用 Xamarin Monodroid 开发的 Android 应用程序中的对象。

我用纯 C# 生成我的 XML,将 XML 文件复制到应用程序的 assets 文件夹中,然后在应用程序启动时对其进行反序列化。

[Serializable]
public class MyGreatObject
{
    public string ObjectName;
    public string ObjectLink;
    public string ObjectStuff;
    public List<OtherGreatObject> OtherObjects;

    public MyGreatObject()
    {
        OtherObjects = new List<OtherGreatObject>();
    }
}

OtherGreaterObject 具有通用属性(我的意思是字符串格式)。 所以,我生成了 XML 并有这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<MyGreatObject xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ObjectName>This is the object name</ObjectName>
  <ObjectLink>http://www.xamarin-is-awesome.com</ObjectLink>
  <ObjectStuff>Description</ObjectStuff>
  <OtherObjects>
        <OtherGreatObject>...</OtherGreatObject>
        <OtherGreatObject>...</OtherGreatObject>
  </OtherObjects>
</MyGreatObject>

我尝试像这样反序列化它:

internal static class SerializableXml
{
    public static MyGreatObject LoadData(Context context_, string fileName_)
    {
        MyGreatObject greatObject = new MyGreatObject();
        try
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyGreatObject));
            using (Stream input = context_.Assets.Open(fileName_, Android.Content.Res.Access.Buffer))
                greatObject = xmlSerializer.Deserialize(input) as MyGreatObject;
        }
        catch (Exception exception)
        {
            Android.Util.Log.Error("XML", "ERROR IN LOADING");
            Android.Util.Log.Error("XML", exception.ToString());
            throw;
        }
        return greatObject;
    }
}

但我收到错误 System.Xml.XmlException: Document element did not appear. Line 1, position 1.

at Mono.Xml2.XmlTextReader.Read() [0x00000] in <filename unknown>:0
at System.Xml.XmlTextReader.Read() [0x00000] in <filename unknown>:0
at System.Xml.XmlReader.MoveToCOntent() [0x00000] in <filename unknown>:0
at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot() [0x00000] in <filename unknown>:0
at System.Xml.Serialization.XmlSerializer.Deserialize(System.Xml.SerializationReader reader) [0x00000] in <filename unknown>:0

我在 Google 上浪费了很多时间,所以我问你。

非常感谢您提供的帮助。

【问题讨论】:

    标签: c# android xml-serialization xamarin.android


    【解决方案1】:

    我在使用 Xamarin.iOS 8.4 时也遇到了这个错误 尽管在 Android 上一切正常,但在 iOS 版本上我收到了错误:

    Document element did not appear.  Line 1, position 1.
    

    我的 XML 文件(不是手动编写的,而是用 c# 序列化的)有以下行:

    <?xml version="1.0" ?>
    

    我通过添加编码属性来修复它,如下所示:

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

    如果你有很多文件,显然这不是最好的解决方案,但也许序列化程序中有一种方法可以编辑编码。我没有调查,因为我不需要,但如果有人遇到这个问题,这可能是一个开始。

    【讨论】:

      【解决方案2】:

      嗯,问题解决了。

      Google 没有发现任何有关该错误的信息(在我的情况下)。 我以为XmlSerializer(几年前我读到过Mono Framework 中的一个错误),但事实并非如此。

      然后,我认为 XML 中有问题,但完全不确定。为什么我会有这样的错误信息?我应该有“无效的节点名称”、“无效的属性”或类似的东西。

      但我是对的。 一个节点的名字不好,这会返回Document element did not appear. Line 1, position 1. (或者什么都没有的异常消息)

      所以,问题解决了。

      【讨论】:

      • “节点的坏名”是什么?我在这里面临同样的错误,但问题是 XmlSerializer 编写了它,所以我不明白为什么 XmlDeserializer 无法读取它。这不像我正在尝试读取我手动创建的 Xml... 我什至将我的 XML 传递给 W3C Xml 验证器:w3schools.com/xml/xml_validator.asp 它告诉我一切都很好。
      • 您的 XML 可以理解为 XML,但由于您的对象规范,不能反序列化为您的对象。我的意思是 List、object[]、主要类型等等。您应该发布一些代码,这样会更容易提供帮助。
      • 我正在考虑它,但我必须为它创建一个问题,我不能在这里发帖。我会看看我是否可以解决问题,否则我可能会发布一个问题,我会在这里写下链接,以便您知道答案时可以回复。问候
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多