C# 从数据表创建 XML
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13072927/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Create an XML from a DataTable
提问by StackOverflowVeryHelpful


Using C# : I want to convert this table into XML. Please ignore the mistakes in row names. This is test data. I have given sample of two columns converted to xml and the corresponding rows as attributes . But i actually want for all columns. This is a Datatable.
使用 C#:我想将此表转换为 XML。请忽略行名称中的错误。这是测试数据。我已经给出了转换为 xml 的两列样本和相应的行作为属性。但我实际上想要所有列。这是一个数据表。
<ListDataCollateralDials>
<DataCollateralDials Type="Conv">
<Multiplier>1</Multiplier>
<Seasoning>1</Seasoning>
<Lockin>1</Lockin>
<Multiplier>1</Multiplier>
<ElbowShift>0</ElbowShift>
<Steepness>1</Steepness>
<Burnout>1</Burnout>
<Adjustment >1</Adjustment>
<Effect>1</Effect>
<Decay>1</Decay>
<Outs>1</Outs>
<Base>700</Base>
<Slope>1</Slope>
<Base>80</Base>
<Slope2>1</Slope2>
<Base2>200</Base2>
<Slope3>1</Slope3>
<Height>0</Height>
<Length>0</Length>
<Height2>0</Height2>
<Length2>0</Length2>
<Elbow>0</Elbow>
<Multiplier2>1</Multiplier2>
<Multiplier3>1</Multiplier3>
</DataCollateralDials>
<DataCollateralDials Type="Conv">
<Multiplier>1</Multiplier>
<Seasoning>1</Seasoning>
<Lockin>1</Lockin>
<Multiplier>1</Multiplier>
<ElbowShift>0</ElbowShift>
<Steepness>1</Steepness>
<Burnout>1</Burnout>
<Adjustment >1</Adjustment>
<Effect>1</Effect>
<Decay>1</Decay>
<Outs>1</Outs>
<Base>700</Base>
<Slope>1</Slope>
<Base>80</Base>
<Slope2>1</Slope2>
<Base2>200</Base2>
<Slope3>1</Slope3>
<Height>0</Height>
<Length>0</Length>
<Height2>0</Height2>
<Length2>0</Length2>
<Elbow>0</Elbow>
<Multiplier2>1</Multiplier2>
<Multiplier3>1</Multiplier3>
</DataCollateralDials>
</ListDataCollateralDials>
采纳答案by StackOverflowVeryHelpful
public static string ToXml(this DataTable table, int metaIndex = 0)
{
XDocument xdoc = new XDocument(
new XElement(table.TableName,
from column in table.Columns.Cast<DataColumn>()
where column != table.Columns[metaIndex]
select new XElement(column.ColumnName,
from row in table.AsEnumerable()
select new XElement(row.Field<string>(metaIndex), row[column])
)
)
);
return xdoc.ToString();
}
This worked great for me. Thanks stackoverflow.
这对我很有用。感谢堆栈溢出。
回答by D Stanley
DataTables are designed to iterate over rows, not columns like you have. There's nothing built-in to persist a DataTablein column-major order. You're going to have use custom code. Pseudo-code would be something like:
DataTables 旨在迭代行,而不是像您一样的列。没有任何内置的东西可以DataTable按列主要顺序持久化 a 。您将不得不使用自定义代码。伪代码类似于:
foeeach(DataColumn)
if(name != "Name")
output column header
foreach(DataRow)
output row value
回答by COLD TOLD
you can try using this
你可以尝试使用这个
http://msdn.microsoft.com/en-us/library/system.data.datatable.writexml.aspx
http://msdn.microsoft.com/en-us/library/system.data.datatable.writexml.aspx
DataTable youdatatable = GetData();
System.IO.StringWriter writer = new System.IO.StringWriter();
youdatatable.WriteXml(writer, XmlWriteMode.WriteSchema, true);
PrintOutput(writer);

