table不读取winform中的xml文件数据 [英] table does not read xml file data in winform

查看:76
本文介绍了table不读取winform中的xml文件数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在数据集中导入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 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



基本上 ReadXml 是试图在没有方案的情况下模仿你的xml文件的结构嘛。更多细节此处 [ ^ ]


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 code

DataSet 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 : 2

As John C Rayan has pointed out - you get a table per high-level node.
But notice what happens if you remove the dateGenerated 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 : 2

The 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 tables

for (var j = 0; j < dt.Rows.Count; j++)
    Console.WriteLine("    Data: {0}", dt.Rows[j].ItemArray[0]);


I get the following output

Table 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 this

Table 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


Essentially ReadXml is attempting to mimic the "structure" of your xml file in the absence of a schema. More details here[^]


这篇关于table不读取winform中的xml文件数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆