如何构建一个函数,将从 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;
}
}
静态列转成没有问题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;
}
}