【问题标题】:There is an error in XML document (0, 0). console application C#XML 文档 (0, 0) 中存在错误。控制台应用程序 C#
【发布时间】:2015-12-10 16:47:58
【问题描述】:

我有一个使用 Web 服务的控制台应用程序。我正在努力实现它以提取有关工作正常的项目的一些信息。

网络服务GetProjectData() 输出几个参数,其中一个是状态。

我创建了一个具有我需要的状态的 xml 文件,因为 GetProjectData() 不接受任何参数。

当我运行以下代码时出现错误There is an error in XML document (0, 0).

你能指点我如何做到这一点吗?

谢谢

这是创建的xml

<root>
    <status>
        <List>Published</List>
        <List>expired</List>
    </status>
</root>

这是我的代码

class ProjectEqualityComparer : IEqualityComparer<WS.ProjectMetaData>
    {
        #region IEqualityComparer<Project> Members

        public bool Equals(WS.ProjectMetaData x, WS.ProjectMetaData y)
        {
            return x.ProjectID.Equals(y.ProjectID);
        }

        public int GetHashCode(WS.ProjectMetaData obj)
        {
            return obj.ProjectID.GetHashCode();
        }

        #endregion
    }

[XmlRoot("root")]
public class ListOFStatus
{
    public ListOFStatus() { Items = new List<Status>(); }
    [XmlElement("status")]
    public List<Status> Items { get; set; }
}

public class Status
{
    [XmlElement("List")]
    public String Name { get; set; }
}


string customerList = "customerList";
string outCsvFile = string.Format(@"C:\\customerList\\{0}.csv", customerList + DateTime.Now.ToString("_yyyyMMdd HHmms"));

XmlSerializer ser = new XmlSerializer(typeof(ListOFStatus));
List<ListOFStatus> list = new List<ListOFStatus>();
object obj = null;

WS.ProjectData[] pr = db.GetProjectData();

using (FileStream fs = new FileStream(outCsvFile, FileMode.Append, FileAccess.Write))                    
using (StreamWriter file = new StreamWriter(fs))
{
    file.WriteLine("ProjectID, ProjectTitle,PublishStatus,NumberOfCustomers,ProjectStartDate,ProjectEndDate, URL");
    foreach(WS.ProjectData proj in pr.Distinct(new ProjectEqualityComparer()))
    {
        var userIDs = db.GetList(proj.ProjectID);                
        file.WriteLine("{0},\"{1}\",{2},{3},{4},{5},{6}",
        proj.ProjectID,
        proj.ProjectTitle,
        obj = ser.Deserialize(fs), //where I need to display the status from the projects either Published or expired
        userIDs.Length.ToString(NumberFormatInfo.InvariantInfo),
        proj.ProjectStartDate.ToString(DateTimeFormatInfo.InvariantInfo),
        proj.ProjectEndDate.ToString(DateTimeFormatInfo.InvariantInfo),
        url[i].ToString());
     }
}

这里有我预期的输出。

【问题讨论】:

  • 您期望的输入/输出是什么?
  • 您正在尝试从输出文件中反序列化。 ser.Deserialize(fs) 其中fsnew FileStream(outCsvFile, FileMode.Append, FileAccess.Write)

标签: c# xml console-application streamwriter xmlserializer


【解决方案1】:

您正在尝试从输出文件中反序列化。你有

using (FileStream fs = new FileStream(outCsvFile, FileMode.Append, FileAccess.Write))                    
// ...
{
    // ...
    obj = ser.Deserialize(fs);
    // ...
}

由于 FileStream 是在 Append 模式下打开的,所以没有什么可读取的。

此外,您正在写入同一个文件,这似乎非常错误。

更新:

您需要按照以下方式做一些事情:

using (FileStream xml = File.OpenRead("xmlfilename"))
using (FileStream fs = new FileStream(outCsvFile, FileMode.Append, FileAccess.Write))
// ...
{
    // ...
    obj = ser.Deserialize(xml);
    // ...
}

【讨论】:

  • @Kris Vandemotten,你是对的!你能帮我改变它,这样我才能让它工作吗?谢谢
  • 嗨,我照你说的做了,但我仍然遇到同样的错误
  • @Aarancibia 我确实假设您确实将 "xmlfilename" 替换为实际文件名,并且该文件确实包含您的 xml?
  • 是的,我确实用实际名称 config.xml 替换了它,但它仍然给出相同的错误
猜你喜欢
  • 2016-04-28
  • 1970-01-01
  • 2020-11-24
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多