C # записывать в XML зацикливание данных или набора данных - PullRequest
0 голосов
/ 04 мая 2018

Мне нужно создать 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 ]

0 голосов
/ 04 мая 2018

Использовать 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();
0 голосов
/ 04 мая 2018

Вы используете 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.

...