首页 新闻 赞助 找找看

获取XML数据绑定到dataTable里,求代码给200分

0
悬赏园豆:200 [已解决问题] 解决于 2010-01-14 09:46

<?xml version="1.0" encoding="utf-8" ?>
<DocumentElement>
  <Node>
    <name>aaa</name>
    <value>1</value>
  </Node>
  <Node>
    <name>bbb</name>
    <value>0</value>
  </Node>
</DocumentElement>

要求到dataTable的效果

 

杯具的主页 杯具 | 初学一级 | 园豆:0
提问于:2010-01-13 15:38
< >
分享
最佳答案
0

DataTable dt = new DataTable();
            dt.Columns.Add("name", typeof(string));
            dt.Columns.Add("value", typeof(string));

            string Result = "";

            string filename = AppDomain.CurrentDomain.BaseDirectory + "Dispose.xml";

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filename);

            XmlNode xmlNode = xmlDoc.SelectSingleNode("DocumentElement");

            foreach (XmlNode exMe in xmlNode)
            {
                XmlNode modeuleNode = exMe.SelectSingleNode("name");

                foreach (XmlNode tipMessageNode in modeuleNode)
                {
                    DataRow dr = dt.NewRow();
                    dr["name"] = tipMessageNode.InnerText;
                    XmlNode valueNode = exMe.SelectSingleNode("value");
                    foreach (XmlNode tipValueNode in valueNode)
                    {
                        dr["value"] = tipValueNode.InnerText;
                    }
                    dt.Rows.Add(dr);
                }
            }

            return dt;

收获园豆:200
大草包 | 小虾三级 |园豆:1745 | 2010-01-13 16:48
楼主不喜欢用Linq2XML? 简单些还不采纳
齐.net | 园豆:1421 (小虾三级) | 2010-01-14 09:55
其他回答(3)
0

这个太多了,最简单的:

DataSet ds=new DataSet();
DataTable dt
=new DataTable();
ds.ReadXml(
"c:\\new.xml");
dt
=ds.Tables[0];

public static DataTable CXmlToDataTable(string xmlStr)
{
if (!string.IsNullOrEmpty(xmlStr))
{
StringReader StrStream
= null;
XmlTextReader Xmlrdr
= null;
try
{
DataSet ds
= new DataSet();
//读取字符串中的信息
StrStream = new StringReader(xmlStr);
//获取StrStream中的数据
Xmlrdr = new XmlTextReader(StrStream);
//ds获取Xmlrdr中的数据
ds.ReadXml(Xmlrdr);
if(ds!=null && ds.Tables[0]!=null){return ds.Tables[0];}
else{return null;}
}
catch (Exception e)
{
throw e;
}
finally
{
//释放资源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}
else
{
return null;
}
}

 

 

http://www.cnzzlu.com/test/Dlp/19/200912/22-12082.html

邀月 | 园豆:25475 (高人七级) | 2010-01-13 15:59
你这种方法有问题吧。DataTable如何从XML中得到数据结构呢
支持(0) 反对(0) 齐.net | 园豆:1421 (小虾三级) | 2010-01-13 16:12
@齐.net:不行
支持(0) 反对(0) 杯具 | 园豆:0 (初学一级) | 2010-01-13 16:33
0

代码
string str = "";
using (StreamReader sr = new StreamReader("文件地址", System.Text.Encoding.GetEncoding("GB2312")))
{
str
= sr.ReadToEnd();
}
MatchCollection mth
= Regex.Matches(str, "<Node><name>([^<]+)</name><value>([^<]+)</value></Node>");
DataTable dt
= new DataTable();
for (int i = 0; i < mth.Count; i++)
{
DataRow dr
= dt.NewRow();
dr[
0] = mth[i].Groups[1].Value;
dr[
1] = mth[i].Groups[2].Value;
dt.Rows.Add(dr);
}
return dt;

 

Ou lei | 园豆:619 (小虾三级) | 2010-01-13 16:07
不行,MatchCollection mth = Regex.Matches(str, "<Node><name>([^<]+)</name><value>([^<]+)</value></Node>");为空
支持(0) 反对(0) 杯具 | 园豆:0 (初学一级) | 2010-01-13 16:33
@杯具:为空是因为正则匹配的原因,你可以自己改下正则,或者断点看下str是否已经读到值
支持(0) 反对(0) Ou lei | 园豆:619 (小虾三级) | 2010-01-13 16:39
0

我们必须知道目标数据表的定义或者格式才能把数据加过去

 

 试试下面的吧

代码
string xmlData="<?xml version=\"1.0\" encoding=\"utf-8\" ?><DocumentElement><Node><name>aaa</name><value>1</value></Node><Node><name>bbb</name><value>0</value></Node></DocumentElement>";

//定义DataTable结构
DataTable dt = new DataTable();
dt.Columns.Add(
new DataColumn("name", typeof(string)));
dt.Columns.Add(
new DataColumn("value", typeof(int)));

//加载XML数据,也可XElement.Load("文件名")
var xdoc=XElement.Parse(xmlData);

var m
= (from mod in xdoc.Elements("Node")
select
new
{
//给DataTabel添加数据行
a=dt.Rows.Add(new[]{mod.Element("name").Value,mod.Element("value").Value})
}).ToList();
齐.net | 园豆:1421 (小虾三级) | 2010-01-13 16:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册