C#中的XML编辑器 - 现在显示字段

时间:2016-08-05 12:30:55

标签: c# xml datagridview

我有一个问题。

我有一个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

我需要做什么?

1 个答案:

答案 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