问题描述
<?xmlversion="1.0"encoding="GBK"standalone="true"?><output><dataset><row><a1>1001</a1><a2>张三</a2><datasetxm><row><kc>语文</kc><cj>120</cj></row><row><kc>数学</kc><cj>130</cj></row><row><kc>英语</kc><cj>140</cj></row></datasetxm></row><row><a1>1002</a1><a2>李四</a2><datasetxm><row><kc>语文</kc><cj>110</cj></row><row><kc>数学</kc><cj>130</cj></row><row><kc>英语</kc><cj>120</cj></row></datasetxm></row></dataset></output>解析结果放在DataSet中,然后显示在datagridview里得到如下结果:a1a2kccj1001张三语文1201001张三数学1301001张三英语1401002李四语文1101002李四数学1301002李四英语120
解决方案
解决方案二:
就两个步骤先用xmldocument或linq的xdocument去读取xml,然后就是用他们去逐级读取节点值,然后在datatable中增加row和column,把值填进去就是了
解决方案三:
引用1楼bdmh的回复:
就两个步骤先用xmldocument或linq的xdocument去读取xml,然后就是用他们去逐级读取节点值,然后在datatable中增加row和column,把值填进去就是了
能不能给个代码?
解决方案四:
引用2楼HQB313的回复:
Quote: 引用1楼bdmh的回复:
就两个步骤先用xmldocument或linq的xdocument去读取xml,然后就是用他们去逐级读取节点值,然后在datatable中增加row和column,把值填进去就是了能不能给个代码?
版主已经说的很明确了,方法都给你了亲,增加row无非就是DataTabledt=newDataTable();dt.Rows.Add();
解决方案五:
http://bbs.csdn.net/topics/390759551
解决方案六:
解决方案七:
使用linqtoXml的XElement相应的方法读取节点读取节点后转乘相对应的类,到集合。
解决方案八:
sqlserver中的处理方法:DECLARE@DOCNVARCHAR(MAX),@HANDINT;SET@DOC=N'<output><dataset><row><a1>1001</a1><a2>张三</a2><datasetxm><row><kc>语文</kc><cj>120</cj></row><row><kc>数学</kc><cj>130</cj></row><row><kc>英语</kc><cj>140</cj></row></datasetxm></row><row><a1>1002</a1><a2>李四</a2><datasetxm><row><kc>语文</kc><cj>110</cj></row><row><kc>数学</kc><cj>130</cj></row><row><kc>英语</kc><cj>120</cj></row></datasetxm></row></dataset></output>';EXECSP_XML_PREPAREDOCUMENT@HANDOUTPUT,@DOC;SELECT*FROMOPENXML(@HAND,'/output/dataset/row/datasetxm/row',2)WITH(a1nvarchar(10)'../../a1',a2nvarchar(10)'../../a2',kcnvarchar(100)'./kc',cjnvarchar(100)'./cj');EXECSP_XML_REMOVEDOCUMENT@HAND
解决方案九:
可以看看这个
解决方案十:
System.Data.DataSetds=newSystem.Data.DataSet();ds.ReadXml("你xml文件地物理绝对路径")即可,当然自然读取出来地表结构也许会和你想地稍微有些差异。不过问题不大datagridview本身也支持多层级地对象显示
解决方案十一:
由于格式的特殊性,需要调整格式,先从XML读取各元素,再重新调整写到datatable中,方法是比较笨些,参考一下(把你格式修改一下,将row-.data,不然提示错误),期待更好的方法。DataSetds=newDataSet("output");ds.ReadXml("t.xml");//直接读出,就用dataGridView1.DataSource=ds.Tables[0].DefaultView;达不到你要的结果,格式是分行的//读取张三数据stringid1=ds.Tables["row"].Rows[0]["a1"].ToString();stringname1=ds.Tables["row"].Rows[0]["a2"].ToString();stringzy1=ds.Tables["data"].Rows[0]["kc"].ToString();stringzy2=ds.Tables["data"].Rows[0]["cj"].ToString();stringzs1=ds.Tables["data"].Rows[1]["kc"].ToString();stringzs2=ds.Tables["data"].Rows[1]["cj"].ToString();stringze1=ds.Tables["data"].Rows[2]["kc"].ToString();stringze2=ds.Tables["data"].Rows[2]["cj"].ToString();//读取李四数据stringid2=ds.Tables["row"].Rows[1]["a1"].ToString();stringname2=ds.Tables["row"].Rows[1]["a2"].ToString();stringly1=ds.Tables["data"].Rows[3]["kc"].ToString();stringly2=ds.Tables["data"].Rows[3]["cj"].ToString();stringls1=ds.Tables["data"].Rows[4]["kc"].ToString();stringls2=ds.Tables["data"].Rows[4]["cj"].ToString();stringle1=ds.Tables["data"].Rows[5]["kc"].ToString();stringle2=ds.Tables["data"].Rows[5]["cj"].ToString();//增加表头DataTabledt=newDataTable();dt.Columns.Add("a1");dt.Columns.Add("a2");dt.Columns.Add("kc");dt.Columns.Add("cj");//增加行数据DataRowdr=dt.NewRow();dr["a1"]=id1;dr["a2"]=name1;dr["kc"]=zy1;dr["cj"]=zy2;dt.Rows.Add(dr);DataRowdr1=dt.NewRow();dr1["a1"]=id1;dr1["a2"]=name1;dr1["kc"]=zs1;dr1["cj"]=zs2;dt.Rows.Add(dr1);DataRowdr2=dt.NewRow();dr2["a1"]=id1;dr2["a2"]=name1;dr2["kc"]=ze1;dr2["cj"]=ze2;dt.Rows.Add(dr2);DataRowdr3=dt.NewRow();dr3["a1"]=id2;dr3["a2"]=name2;dr3["kc"]=ly1;dr3["cj"]=ly2;dt.Rows.Add(dr3);DataRowdr4=dt.NewRow();dr4["a1"]=id2;dr4["a2"]=name2;dr4["kc"]=ls1;dr4["cj"]=ls2;dt.Rows.Add(dr4);DataRowdr5=dt.NewRow();dr5["a1"]=id2;dr5["a2"]=name2;dr5["kc"]=le1;dr5["cj"]=le2;dt.Rows.Add(dr5);dataGridView1.DataSource=dt;
解决方案十二:
<?xmlversion="1.0"encoding="GBK"standalone="true"?>修改为<?xmlversion="1.0"encoding="GBK"standalone="yes"?>
解决方案十三:
解决方案十四:
把Xml文件的数值转到dataset然后再从dataset转到Excel文件,最后就是一个excel文件,这样的操作咋完成呢?