none
XML文档加载问题:Unexpected XML declaration. The XML declaration must be the first node in the document。。。 RRS feed

  • 问题

  • 我已经把问题单独成一个工程了
    功能描述:
    1、主界面两个Button“写入XML”和“加载XML”
    2、“写入XML”调用“XMLHelper.AddItem();
    功能为:如果xml文档不存在就创建,并增加一个XElement;如果存在就直接增加一个XElement
      (为了看到xml的结果用了MessageBox.Show())
    public static void AddItem()
            {
                using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (isf.FileExists("xmlfile.xml"))
                    {
                        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("xmlfile.xml", FileMode.Open, FileAccess.ReadWrite, isf))
                        {
                            XDocument xdo = XDocument.Load(stream);
    
                            XElement _item = new XElement("file");//创建一个XML元素
                            XAttribute name = new XAttribute("name", "name");//创建一个XML属性
                            XAttribute duration = new XAttribute("duration", "duration");
                            _item.Add(name, duration);//将属性添加到 XML元素上
    
                            xdo.Element("files").Add(_item);
    
                            xdo.Save(stream);
    
                            MessageBox.Show(xdo.ToString());
                           
                        }
                    }
                    else
                    {
                        XElement _items = new XElement("files");//创建一个XML元素
                        XElement _item = new XElement("file");//创建一个XML元素
                        XAttribute name = new XAttribute("name", "name");//创建一个XML属性
                        XAttribute duration = new XAttribute("duration", "duration");
    
    
                        _item.Add(name, duration);//将属性添加到 XML元素上
                        _items.Add(_item);
                        //用_item 新建一个XML的Linq文档 
                        XDocument _doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), _items);
                        // XDocument.
                        //创建一个本地存储的文件流
                        IsolatedStorageFileStream location = new IsolatedStorageFileStream("xmlfile.xml", FileMode.Create, isf);
                        //将本地存储文件流转化为可写流
                        StreamWriter file = new StreamWriter(location);
                        //将XML文件 保存到流file上 即已经写入到手机本地存储文件上
                        _doc.Save(file);
    
                        MessageBox.Show(_doc.ToString());
    
                        file.Dispose();//关闭可写流
                        location.Dispose();//关闭手机本地存储流
                    }
                }
            }



    3、“加载XML”调用“XMLHelper.GetItem();

    功能为:加载xml文档并进行相应操作(相应操作代码注释了),这里只将xml文档MessageBox.Show出来

    public static void GetItem()
            {
                using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    XElement _xml;//定义Linq的XML元素
                    //打开本地存储文件
                    IsolatedStorageFileStream location = new IsolatedStorageFileStream("xmlfile.xml", FileMode.Open, storage);
                    //转化为可读流
                    StreamReader file = new StreamReader(location);
                    //解析流 转化为XML
                    try
                    {
                        _xml = XElement.Parse(file.ReadToEnd());
                        MessageBox.Show(_xml.ToString());
                    }
                    catch (System.Exception ex)
                    {
                       MessageBox.Show(ex.Message);
                    }
                   
    
                    file.Dispose();
                    location.Dispose();
                }
            }

    出现的问题:
    1、点击“写入XML”,
    MessageBox.Show()结果为:
    <files>
      <file name="name" duration="duration" />
    </files>

    2、点击“加载XML”
           结果同上。

    3、再次点击“写入XML”,
    MessageBox.Show()结果为:
    <files>
      <file name="name" duration="duration" />
      <file name="name" duration="duration" />
    </files>

    4、再次点击“加载XML”
           
    异常消息:

    Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it. Line 4, position 11.


    我发现的问题:
    (使用“WindowsPhonePowerTools”工具查看独立存储空间中的xml文件)
    1、第一次“写入XML”时,xml文档如下:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <files>
      <file name="name" duration="duration" />
    </files>

    2、第二次“写入XML”时,xml文档如下:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <files>
      <file name="name" duration="duration" />
    </files><?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <files>
      <file name="name" duration="duration" />
      <file name="name" duration="duration" />
    </files>

     看到上面的文档内容,异常的原因就很清楚了,但是却不知道问题产生原因。

    这个问题是历史遗留问题没解决。。。这次又遇到了。。。求大家神助啊~~~

    • 已移动 Jiong ShiMVP 2014年3月10日 7:47 开发相关问题
    2014年3月3日 10:54