如何构建一个函数,将从 DataTable 输入的列转换为 xml?

How do I build a function that transforms the columns entered from the DataTable to xml?

静态列转成没有问题xml 问题是我试图通过数组进行转换并在每次需要时插入它 你能加吗 循环到 XElement

  string  creatColumnXml(params int[] ColId)
        {
            
            return new XElement(table.TableName, table.Rows.Cast<DataRow>().Select(row =>
                 new XElement("row",
                         //for ( int i =0;i<ColId.Length;i++)
                         //new XElement(table.Columns[ColId[i]].ColumnName, row[ColId[i]]),
                         new XElement(table.Columns[0].ColumnName, row[0]),
                         new XElement(table.Columns[1].ColumnName, row[1]),
                          new XElement(table.Columns[2].ColumnName, row[2])

                 ))
            ).ToString();
        }

我找到了解决方案

 XElement[] c = new XElement[ColId.Length];
            XElement[] r = new XElement[table.Rows.Count];
            int y = 0;
            string s="" ;
            foreach (DataRow row in table.Rows)
            {
            
                for (int i = 0; i < ColId.Length; i++)
                {
                    c[i] = new XElement(table.Columns[ColId[i]].ColumnName, row[ColId[i]]);
                }     
                r[y] = new XElement("row",c);
                y++;
            }
            s = new XElement(table.TableName, r).ToString();

您可以在现有的 lambda 中再次使用 LINQ

string creatColumnXml(params int[] ColId)
{
    return new XElement(table.TableName,
        table.Rows.Cast<DataRow>().Select(row =>
            new XElement("row",
                ColId.Select(c => new XElement(table.Columns[c].ColumnName, row[c]))
            )
        ).ToString();
}

假设您从数据集中获得数据行,您可以使用 DataSet.WriteXml 方法直接将数据集转换为 XML。

这是一个例子,希望对您有所帮助。


    DataSet MainDS = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter();

    da.SelectCommand = new SqlCommand( "select name, city, country from user" );
    da.Fill(MainDS, "row");

    XmlDocument xml = new XmlDocument();

    using (MemoryStream ms = new MemoryStream()) {
        try {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = Encoding.UTF8;
            settings.CheckCharacters = false;
            using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings)) {
                MainDS.WriteXml(xmlWriter);
                xmlWriter.Close();
            }
            ms.Position = 0;
            xml.Load(ms);
        } catch (Exception err) {
            throw new Exception("Error loading dataset to xml", err);
        }
    }

从那里开始,使用 XSL 进行格式化。

您还可以指示 .NET 创建基于 XML 的属性。

foreach (System.Data.DataTable dt in ds.Tables) {
    foreach (DataColumn dc in dt.Columns) {
        dc.ColumnMapping = MappingType.Attribute;
    }
}