读书人

读取XML文件有关问题

发布时间: 2011-12-17 23:37:33 作者: rapoo

读取XML文件问题
我有一个XML文件格式如下:
<?xml version= "1.0 " encoding= "gb2312 "?>
<DATA000022200612>
<area>
<areaid> 110000 </areaid>
<item>
<PK>
<key> 10010001 </key>
<intervaltype> 5 </intervaltype>
</PK>
<value> 1878.85 </value>
<remark> </remark>
</item>
<item>
<PK>
<key> 10020001 </key>
<intervaltype> 5 </intervaltype>
</PK>
<value> 18550.94 </value>
<remark> </remark>
</item>
<item>
<PK>
<key> 10020002 </key>
<intervaltype> 5 </intervaltype>
</PK>
<value> 54130.9 </value>
<remark> </remark>
</item>
</area>
<area>
<areaid> 120000 </areaid>
<item>
<PK>
<key> 10010001 </key>
<intervaltype> 5 </intervaltype>
</PK>
<value> 2344.59 </value>
<remark> </remark>
</item>
<item>
<PK>
<key> 10020001 </key>
<intervaltype> 5 </intervaltype>
</PK>
<value> 10621.42 </value>
<remark> </remark>
</item>
</area>
</DATA000022200612>
我要把它读到DATAGRID中,显示格式如下:
areaid key value
110000 10010001 1878.85
110000 10020001 18550.94
110000 10020002 54130.9
120000 10010001 2344.59
120000 10020001 10621.42

请问代码应该怎么写啊?小弟刚学C#,希望给写出详细代码,非常感谢!


------解决方案--------------------


你这个结构定义的也太~~~~~

跟你的DataGrid一点关系都没有

只能新创建一个DataTable
然后循环的利用XPath读取节点
因为key 和Value这两个列是最多的
因此可以先读取key和Value,然后去判断Value的父节点是否存在areaid 这个兄弟节点,
如果存在则用存在的,否则用上一个
[解决办法]
XmlDocument doc = new XmlDocument();
doc.Load(file);//xml文件路径
XmlNodeList valueList = doc.SelectNodes( "/DATA000022200612/area/item/value ");
XmlNodeList keyList = doc.SelectNodes( "/DATA000022200612/area/item/PK/key ");

[解决办法]
思路是先读成DataSet然后再做,就简单了,让DataSet和控件打交道
[解决办法]
private void Form1_Load(object sender, EventArgs e)
{
string file = "c:\\q.xml ";

XmlDocument _xmldoc = new XmlDocument();
_xmldoc.Load(new StreamReader (file));

DataTable dt = new DataTable();

dt.Columns.Add ( new DataColumn( "areaid ",typeof(string)));
dt.Columns.Add ( new DataColumn( "key ",typeof(string)));
dt.Columns.Add ( new DataColumn( "value ",typeof(string)));

XmlElement root = _xmldoc.DocumentElement; // <DATA000022200612>
foreach (XmlNode area in root.ChildNodes) //area
{
XmlNode areaidnode = area.SelectSingleNode( "areaid ");
string areaid = areaidnode.InnerText;


XmlNodeList items = area.SelectNodes( "item ");

foreach (XmlNode node in items) //item
{
string key = node.SelectSingleNode( "PK/key ").InnerText;
string value = node.SelectSingleNode( "value ").InnerText;

DataRow dr = dt.NewRow();
dr[ "areaid "] = areaid;
dr[ "key "] = key;
dr[ "value "] = value;
dt.Rows.Add(dr);
}
}

this.dataGridView1.DataSource = dt;


}

读书人网 >C#

热点推荐