table不读取winform中的xml文件数据 [英] table does not read xml file data in winform
问题描述
我正在数据集中导入xml文件数据并在datagridview中显示。
{
openFileDialog1.Multiselect = < span class =code-keyword> true ;
openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
txtXML.Text = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
DataSet ds = new DataSet();
ds.ReadXml(openFileDialog1.FileName.ToString());
dataGridView1.DataSource = ds.Tables [ 0 ]; ----------- ERRRor
}
当我打开一个名为AQList的xml文件时。 xml
当我写为dataGridView1.DataSource = ds.Tables [0];时只显示第一行----只显示第一行
当我写为dataGridView1.DataSource = ds.Tables [2]; -------显示所有数据。
我的xml文件是
<? < span class =code-summarycomment> xml version = 1.0 编码 = UTF-8 ? >
- < CONSOLIDATED_LIST dateGenerated = 2015-01-23T00:00:00 > - < INDIVIDUALS > - < INDIVIDUAL > < DataId > 1 < / DataId > < < span class =code-leadattribute>名称 > Hitesh < / Name > < 地址 > 孟买< /地址 > < / INDIVIDUAL > - < INDIVIDUAL > < DataId > 2 < / DataId > < 名称 > Jitesh < /姓名 > < 地址 > 孟买< /地址 > < / INDIVIDUAL > - < INDIVIDUAL > < DataId > 3 < ; / DataId > < 名称 > Ritesh < / Name > < 地址 > 孟买< span class =code-keyword>< /地址 > < / INDIVIDUAL > - < INDIVIDUAL > < DataId > 4 < / DataId > < ; 名称 > Mitesh < /姓名 > < 地址 > 孟买< /地址 > < span class =code-keyword>< / INDIVIDUAL > - < INDIVIDUAL > < DataId > 5 < / DataId > < 名称 > Nitesh < ; / Name > < 地址 > 孟买< /地址 > < / INDIVIDUAL > < / INDIVIDUALS > - < span class =code-keyword>< ENTITY > - < ENTITIES > < DataId > 11 < / DataId > < 名称 > Hitesh < /姓名 > ; < 地址 > 孟买< /地址 > < / ENTITIES > - < ENTITIES > < DataId > 12 < / DataId > < 名称 > Hitesh < / Name > < 地址 > 孟买< /地址 > < / ENTITIES > - < ENTITIES > < span class =code-keyword>< DataId > 13 < / DataId > < 名称 > Hitesh < / Name > < 地址 > 孟买< /地址 > < / ENTITIES > < / ENTITY > < span class =code-keyword>< / CONSOLIDATED_LIST >
我给s写了一个例子你是怎么回事。
使用这个xml片段<? xml version = 1.0 编码 = UTF-8 ? >
< level1 dateGenerated = 2015-01-23T00:00:00 >
< level2 >
< level3 < span class =code-keyword>> 某些数据< / level3 < span class =code-keyword>>
< level3 > 更多数据< / level3 >
< / level2 >
< / level1 >
此代码DataSet ds = < span class =code-keyword> new DataSet();
ds.ReadXml( @ c:\ temp\test2.xml) ;
for ( var i = 0 ; i < ds.Tables.Count; i ++)
{
var dt = ds.Tables [i];
Console.WriteLine( 表{0} - {1}:{2} ,i,dt.TableName,dt.Rows.Count);
}产生此输出
表0 - level1:1
表1 - level2:1
表2 - level3:2正如John C Rayan指出的那样 - 每个高级节点都有一个表格。
但请注意如果删除dateGenerated $会发生什么c $ c> attribute ...
<? xml version = 1.0 编码 = UTF-8 ? >
< level1 >
< level2 >
< < span class =code-leadattribute> level3 > 某些数据< / level3 >
< level3 > 更多数据< / level3 >
< / level2 >
< / level1 >现在运行上面的代码你得到这些结果
表0 - level2:1
表1 - level3: 2最高级别节点level1不再包含任何感兴趣的内容,只有后续节点被读入表格。
如果我现在添加一些代码以深入研究这些表for ( var j = < span class =code-digit> 0 ; j < dt.Rows.Count; j ++)
Console.WriteLine( 数据:{0},dt.Rows [我是得到以下输出表0 - level2:1
数据:0
表1 - level3:2
数据:一些数据
数据:更多数据
如果我通过我的小程序推送你的原始xml我得到这个表0 - CONSOLIDATED_LIST:1
数据:0 2015-01-23T00:00:00
表1 - 个人:1
数据:0 0
表2 - 个人:5
数据:1 Hitesh
数据:2 Jitesh
数据:3 Ritesh
数据:4 Mitesh
数据:5 Nitesh
表3 - ENTITY:1
数据:0 0
表4 - 实体:3
数据:11 Hitesh
数据:12 Hitesh
数据:13 Hitesh
I am importing xml file data in dataset and displays in datagridview.
{
openFileDialog1.Multiselect = true;
openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
txtXML.Text = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
DataSet ds = new DataSet();
ds.ReadXml(openFileDialog1.FileName.ToString());
dataGridView1.DataSource = ds.Tables[0]; -----------ERRRor
}
when i open one xml file named as AQList.xml
it shows only first row when i write as dataGridView1.DataSource = ds.Tables[0];----Only display first row
and when i write as dataGridView1.DataSource = ds.Tables[2];-------Display all data.
My xml file is
<?xml version="1.0" encoding="UTF-8"?>
-<CONSOLIDATED_LIST dateGenerated="2015-01-23T00:00:00"> -<INDIVIDUALS> -<INDIVIDUAL> <DataId>1</DataId> <Name>Hitesh</Name> <Address>Mumbai</Address> </INDIVIDUAL> -<INDIVIDUAL> <DataId>2</DataId> <Name>Jitesh</Name> <Address>Mumbai</Address> </INDIVIDUAL> -<INDIVIDUAL> <DataId>3</DataId> <Name>Ritesh</Name> <Address>Mumbai</Address> </INDIVIDUAL> -<INDIVIDUAL> <DataId>4</DataId> <Name>Mitesh</Name> <Address>Mumbai</Address> </INDIVIDUAL> -<INDIVIDUAL> <DataId>5</DataId> <Name>Nitesh</Name> <Address>Mumbai</Address> </INDIVIDUAL> </INDIVIDUALS> -<ENTITY> -<ENTITIES> <DataId>11</DataId> <Name>Hitesh</Name> <Address>Mumbai</Address> </ENTITIES> -<ENTITIES> <DataId>12</DataId> <Name>Hitesh</Name> <Address>Mumbai</Address> </ENTITIES> -<ENTITIES> <DataId>13</DataId> <Name>Hitesh</Name> <Address>Mumbai</Address> </ENTITIES> </ENTITY> </CONSOLIDATED_LIST>
I've written an example to show you what is going on.
Using this xml snippet<?xml version="1.0" encoding="UTF-8"?> <level1 dateGenerated="2015-01-23T00:00:00"> <level2> <level3>some data</level3> <level3>some more data</level3> </level2> </level1>
This codeDataSet ds = new DataSet(); ds.ReadXml(@"c:\temp\test2.xml"); for (var i = 0; i < ds.Tables.Count; i++) { var dt = ds.Tables[i]; Console.WriteLine("Table {0} - {1} : {2}", i, dt.TableName, dt.Rows.Count); }produces this output
Table 0 - level1 : 1 Table 1 - level2 : 1 Table 2 - level3 : 2As John C Rayan has pointed out - you get a table per high-level node.
But notice what happens if you remove thedateGenerated
attribute...<?xml version="1.0" encoding="UTF-8"?> <level1> <level2> <level3>some data</level3> <level3>some more data</level3> </level2> </level1>Now when you run the above code you get these results
Table 0 - level2 : 1 Table 1 - level3 : 2The highest level node "level1" no longer contains anything of interest and only the subsequent nodes are read into tables.
If I now add some code to dig into those tablesfor (var j = 0; j < dt.Rows.Count; j++) Console.WriteLine(" Data: {0}", dt.Rows[j].ItemArray[0]);
I get the following outputTable 0 - level2 : 1 Data: 0 Table 1 - level3 : 2 Data: some data Data: some more data
If I push your original xml through my little program I get thisTable 0 - CONSOLIDATED_LIST : 1 Data: 0 2015-01-23T00:00:00 Table 1 - INDIVIDUALS : 1 Data: 0 0 Table 2 - INDIVIDUAL : 5 Data: 1 Hitesh Data: 2 Jitesh Data: 3 Ritesh Data: 4 Mitesh Data: 5 Nitesh Table 3 - ENTITY : 1 Data: 0 0 Table 4 - ENTITIES : 3 Data: 11 Hitesh Data: 12 Hitesh Data: 13 Hitesh
EssentiallyReadXml
is attempting to mimic the "structure" of your xml file in the absence of a schema. More details here[^]
这篇关于table不读取winform中的xml文件数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!