我有一个问题。
我有一个XML文件,其中包含我想在datagridview中读取的数据字段。
XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="ALMO_Exercicio" fieldtype="string" WIDTH="4"/>
<FIELD attrname="ALMO_MesReferencia" fieldtype="string" WIDTH="2"/>
<FIELD attrname="ALMO_Saldo" fieldtype="string" WIDTH="17"/>
</FIELDS>
<PARAMS/>
</METADATA>
<ROWDATA>
<ROW ALMO_Exercicio="2016" ALMO_MesReferencia="01" ALMO_Saldo="0.00"/>
</ROWDATA>
</DATAPACKET>
读取此内容的C#文件:
try
{
XmlReader xmlFile = XmlReader.Create(ofd.FileName, new XmlReaderSettings());
ds.ReadXml(xmlFile);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
所以,我打开时唯一显示的是: software only shows the version of xml file
我需要做什么?
答案 0 :(得分:0)
您将不得不自己处理XML,您不能只将其加载到DataSet
中。
您可以从每个FIELD
创建列,然后通过查找每个ROW
中相同名称的属性来获取行数据。 LINQ to XML非常简单:
var doc = XDocument.Load(ofd.FileName);
var columns = doc.Descendants("FIELD")
.Attributes("attrname")
.Select(fieldName => new DataColumn(fieldName.Value))
.ToArray();
var rows = doc.Descendants("ROW")
.Select(row => columns.Select(col => (string)row.Attribute(col.ColumnName)).ToArray());
然后,您可以从此处创建DataTable
:
var table = new DataTable();
table.Columns.AddRange(columns);
foreach (var row in rows)
{
table.Rows.Add(row);
}
有关正常工作的演示,请参阅this fiddle。