XML文档中的错误。意外的XML声明。 XML声明必须是文档中的第一个节点

时间:2015-08-24 23:31:18

标签: c# xml c#-4.0 serialization

  

XML文档中存在错误(8,20)。内部1:意外的XML声明。 XML声明必须是文档中的第一个节点,并且不允许在其前面出现空白字符。

好的,我理解这个错误。

然而,我如何理解它是困扰我的。

我使用Microsoft的Serialize工具创建文档。然后,我再次使用微软的反序列化工具转身并尝试再读回来。

我无法控制以正确的格式编写XML文件 - 我可以看到。

这是我用来读写的单个例程。

private string xmlPath = System.Web.Hosting.HostingEnvironment.MapPath(WebConfigurationManager.AppSettings["DATA_XML"]);
private object objLock = new Object();
public string ErrorMessage { get; set; }

public StoredMsgs Operation(string from, string message, FileAccess access) {
    StoredMsgs list = null;
    lock (objLock) {
        ErrorMessage = null;
        try {
            if (!File.Exists(xmlPath)) {
                var root = new XmlRootAttribute(rootName);
                var serializer = new XmlSerializer(typeof(StoredMsgs), root);
                if (String.IsNullOrEmpty(message)) {
                    from = "Code Window";
                    message = "Created File";
                }
                var item = new StoredMsg() {
                    From = from,
                    Date = DateTime.Now.ToString("s"),
                    Message = message
                };
                using (var stream = File.Create(xmlPath)) {
                    list = new StoredMsgs();
                    list.Add(item);
                    serializer.Serialize(stream, list);
                }
            } else {
                var root = new XmlRootAttribute("MessageHistory");
                var serializer = new XmlSerializer(typeof(StoredMsgs), root);
                var item = new StoredMsg() {
                    From = from,
                    Date = DateTime.Now.ToString("s"),
                    Message = message
                };
                using (var stream = File.Open(xmlPath, FileMode.Open, FileAccess.ReadWrite)) {
                    list = (StoredMsgs)serializer.Deserialize(stream);
                    if ((access == FileAccess.ReadWrite) || (access == FileAccess.Write)) {
                        list.Add(item);
                        serializer.Serialize(stream, list);
                    }
                }
            }
        } catch (Exception error) {
            var sb = new StringBuilder();
            int index = 0;
            sb.AppendLine(String.Format("Top Level Error: <b>{0}</b>", error.Message));
            var err = error.InnerException;
            while (err != null) {
                index++;
                sb.AppendLine(String.Format("\tInner {0}: {1}", index, err.Message));
                err = err.InnerException;
            }
            ErrorMessage = sb.ToString();
        }
    }
    return list;
}

我的日常生活有问题吗?如果微软写了这个文件,我觉得它应该能够读回来。

任何人都可以使用它。

这是我的StoredMsg类:

[Serializable()]
[XmlType("StoredMessage")]
public class StoredMessage {
    public StoredMessage() {
    }
    [XmlElement("From")]
    public string From { get; set; }
    [XmlElement("Date")]
    public string Date { get; set; }
    [XmlElement("Message")]
    public string Message { get; set; }
}

[Serializable()]
[XmlRoot("MessageHistory")]
public class MessageHistory : List<StoredMessage> {
}

它生成的文件不会让我觉得它有任何问题。

xml screenshot

我在这里看到了解决方案:

Error: The XML declaration must be the first node in the document

但是,在这种情况下,似乎有人已经有了他们想要阅读的XML文档。他们只需修理它。

我的Microsoft创建了一个XML文档,因此应该由Microsoft读回来。

0 个答案:

没有答案