【问题标题】:c# write XML looping a datatable or datasetc#编写循环数据表或数据集的XML
【发布时间】:2018-05-04 11:35:23
【问题描述】:

我需要从数据集或数据表中创建 XML 文件; foreach 数据集中的记录我必须按照我的代码创建一个文件:

SqlDataAdapter da = new SqlDataAdapter("select top 5 * from dbo.Log", con);
DataSet ds = new DataSet();
da.Fill(ds, "Log");
DataTable dt = new DataTable("Log");
da.Fill(dt);                
foreach (DataRow row in dt.Rows)
{
row.Table.WriteXml("D:\\" + row["id"] + ".xml");
// some other code...

创建 5 个 XML 文件,但在数据集/数据表中找到了所有 5 条记录...我只希望每个文件都有一条记录! 我该怎么做? 谢谢

【问题讨论】:

    标签: c# datatable writexml


    【解决方案1】:

    使用 XmlTextWriter。下面只是一个例子。您可以根据需要进行修改。

    XmlTextWriter writer = new XmlTextWriter("D:\\" + row["id"] + ".xml", System.Text.Encoding.UTF8);
    writer.WriteStartDocument(true);
    writer.Formatting = Formatting.Indented;
    writer.Indentation = 2;
    writer.WriteStartElement("Table");
    createNode("1", "Product 1", "1000", writer);
    writer.WriteEndElement();
    writer.WriteEndDocument();
    writer.Close();
    

    【讨论】:

      【解决方案2】:

      您正在使用row.Table.WriteXml(...)。这将写入整个表,因此:所有行。据我所知,没有用于一次导出一行的内置 API;我想您可以将行克隆/添加/删除到一个相同但空的表中?

      类似的东西(未经测试):

      var clone = dt.Clone(); // is empty
      foreach(DataRow row in dt.Rows)
      {
          clone.Rows.Clear();
          clone.ImportRow(row);
          clone.WriteXml("D:\\" + row["id"] + ".xml");
      }
      

      不过,使用XmlWriter 可能更容易。

      【讨论】:

      • 嗨,马克,感谢您的回答,您有示例代码吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2022-09-27
      • 2011-05-05
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多