【问题标题】:How to write a datarow to a xml file如何将数据行写入 xml 文件
【发布时间】:2008-10-27 00:04:23
【问题描述】:

这就是故事。我在做一个程序,每次关闭程序时,用户创建的所有数据(文件链接)都会丢失,所以每当用户重新打开程序时,他确实必须重新完成所有工作。

所以我决定使用 xml 文件来存储数据,因为加载 dbms 需要很长时间,而且处理纯文本文件的代码很难维护。

数据主要由 Links 组成,其中存储了两个文件路径,一个为源,一个为目标,一个布尔值表示程序关闭前的链接状态,以及其他一些不太重要的东西。

当程序加载时,应读取数据以恢复应用程序的先前状态。

所以我做了一个这样的xml文件:

...
  <Directories>
    <Directory id="0">
      <FilePath>C:\Test1</FilePath>
      <PathSeparator>\</PathSeparator>
    </Directory>
...

并使用DataSet来获取数据。

Directory getDirectory()
{
    ds = new DataSet();
                ds.ReadXml(xmlPath);
    DataRow[] myRow = ds.Tables["Directory"].
                Select("id ="+id.ToString());// "id = id"
    string temp = myRow[0]["FilePath"].ToString();
    Directory result = new Directory();
    result.path = temp;
    temp = myRow[0]["PathSeparator"].ToString();
    result.pathSeparator = temp[0];
    return result;
}

一切正常,但后来我尝试向 xml 添加新的“行”:

public static int addDirectory(DataSet ds, char pathSeparator, string path)
{
    DataRow myRow = ds.Tables["Directory"].NewRow();
    myRow.ItemArray[0] = 8;
    myRow.ItemArray[1] = path;
    myRow.ItemArray[2] = pathSeparator.ToString();
    myRow.ItemArray[3] = "lol";
    ds.Tables["Directory"].Rows.Add(myRow);
    ds.AcceptChanges();
    ds.WriteXml(ApplicationDataManager.xmlPath);
    return 8;
}

但所有这些写入都是在 .xml 上的一个随机位置

我做错了什么?

顺便说一句,如果有人对我应该如何存储这些数据有任何建议,我会很高兴听到(阅读)。

提前致谢!

[更新] 文件链接用于在两个目录之间建立连接,因此它们可以同步。

【问题讨论】:

  • "每次关闭程序时,用户创建的所有数据(文件链接)都会丢失," 你应该解决这个问题,不要再乱用 XML。您是什么意思“用户创建的数据丢失”?这才是最重要的。
  • S.Lott,这正是我试图通过“弄乱 XML”来解决的问题,程序没有义务存储以前的会话状态,包括所有链接。尽管通过不存储链接,用户需要重新创建他之前创建的所有链接。
  • 还是通过在线数据库或网络服务远程存储?
  • 你不应该添加行,你应该编写一个全新的数据集。
  • @Diones:“用户创建的数据丢失”是什么意思?

标签: c# xml


【解决方案1】:

如果 LINQ 在您的工具箱中,我强烈建议使用它来读取/写入 xml,而不是 DataTable。它更加流畅和直观,您可以控制节点的位置......无论您将它们添加到集合中的任何位置,它们都会出现在生成的 XML 中。

这里有一个简短的介绍,如果您稍微搜索一下,网络上就会有大量关于它的信息: http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

【讨论】:

  • 使用 DataSets 是一种相当重量级的方式 - 使用 Linq XElement 和朋友会给您更多的控制权,而且您可能能够利用您已经在内部使用的对象。
【解决方案2】:

如果您想要一种快速而肮脏的方式,最好的选择是将用户信息加载到数据集中,调用“WriteXml”方法保存并使用“ReadXml”将其拉回。DataSet 使用的 XML 格式它自己会以相同的格式进出。

您还有许多其他选择,但 DataSet 是最快速和最肮脏的方式。

【讨论】:

    猜你喜欢
    • 2014-03-20
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2014-03-12
    相关资源
    最近更新 更多