C# записывать в XML цикл данных или набора данных
Мне нужно создать 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 записей, найденных в наборе данных /datatable... Я хочу только одну запись для каждого файла! Как я могу это сделать? Спасибо
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
, хоть.
Используйте 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();