我现在要做一个接口,接收到的是string型的以xml格式组成的库结构及数据,我该怎么去解析这个字符串呢?
解决方案 »
- 类、枚举、结构体、接口,这四个东西属于同一个级别。请问,还有什么东西和这四个东西属于同一个级别?
- winform 如何获取局域网中所有打印机的状态?
- 大家多线程同步都是怎么做的
- o.cn三维城市地图源代码出售
- 源码:树型算法和实现,用它就可以把你的数据加载到Win/Web TreeView/Node上了
- 一个DropDownList的小问题,怎么传参数都不对,麻烦大家看看...
- 用C#如何实现象WINRAR中目录和文件的显示功能(如双击打开下级目录或返回上级目录)__(在WebForm下)
- 怎样在程序启动的时候初始化水晶报表,因为第一次打开报表,实在是太慢了
- 奇怪的comboBox的数据绑定问题!
- 谁有csgl
- VS2005 用C#怎么加载user.dll?
- 请问如何用正则表达式匹配下面的字符串??
<?xml version="1.0" encoding="GBK" ?>
<dataset>
<datastores>
<datastore name="dsAssetNo">
<metadata>
<column name="ORG_NO" type="VARCHAR"/>
<column name="ASSET_NO" type="VARCHAR"/>
<column name="COLL_ITEM_CODE" type="VARCHAR"/>
<column name="YMD" type="TIMESTEMP"/>
</metadata>
<rowset>
<row>
<column>23101</column>
<column>300</column>
<column>02</column>
<column>2006-3-14 16:42:20</column>
</row>
……...
<row>
<column>23101</column>
<column>5300</column>
<column>02</column>
<column>2006-3-15 16:42:20</column>
</row>
</rowset>
</datastore>
</datastores>
</dataset>我需要得到column name对应的column的值
LoadXml 方法
然后 ReadNode
http://www.cnblogs.com/eflylab/archive/2008/07/14/1242982.html
http://www.cnblogs.com/cstded/archive/2007/02/16/651685.html
http://www.cnblogs.com/lauer0246/archive/2008/07/18/1246350.html
你需要自己实现getFieldType(),把字段类型对应好。private Type getFieldType(string sqltype)
{
//TODO 映射数据类型
return typeof(string);
}
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
//doc.LoadXml("");
XmlNodeList datastore = doc.SelectNodes("dataset/datastores/datastore"); DataSet ds = new DataSet();
foreach (XmlNode node in datastore)
{
DataTable dt = new DataTable();
XmlNodeList column = node.SelectNodes("metadata/column");
foreach (XmlNode nd in column)
{
DataColumn dc = new DataColumn();
dc.ColumnName = nd.Attributes["name"].Value;
dc.DataType = getFieldType(nd.Attributes["type"].Value);
dt.Columns.Add(dc);
} XmlNodeList row = node.SelectNodes("rowset/row");
foreach (XmlNode nd in row)
{
XmlNodeList field = nd.SelectNodes("column");
DataRow dr = dt.NewRow();
for (int i = 0; i < field.Count; i++)
{
//TODO 转换数据类型
dr[i] = field[i].InnerText;
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
}
DataView dv = ds.Tables[0].DefaultView;
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = ds;
}
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dv;
然后你再使用SelectNodes等方法结合XPath,把需要的节点选出来即可。
string str = @"<?xml version=""1.0"" encoding=""GBK"" ?>
<dataset>
<datastores>
<datastore name=""dsAssetNo"">
<metadata>
<column name=""ORG_NO"" type=""VARCHAR""/>
<column name=""ASSET_NO"" type=""VARCHAR""/>
<column name=""COLL_ITEM_CODE"" type=""VARCHAR""/>
<column name=""YMD"" type=""TIMESTEMP""/>
</metadata>
<rowset>
<row>
<column>23101 </column>
<column>300 </column>
<column>02 </column>
<column>2006-3-14 16:42:20 </column>
</row>
……...
<row>
<column>23101 </column>
<column>5300 </column>
<column>02 </column>
<column>2006-3-15 16:42:20 </column>
</row>
</rowset>
</datastore>
</datastores>
</dataset> ";
XmlDocument doc = new XmlDocument();
doc.LoadXml(str);
DataTable dt = new DataTable();
XmlNodeList metadata = doc.GetElementsByTagName("metadata");
foreach (XmlNode xn in metadata)
{
foreach (XmlNode node in xn.ChildNodes)
{
dt.Columns.Add(new DataColumn(node.Attributes["name"].Value));
}
}
XmlNodeList rows = doc.GetElementsByTagName("row");
foreach (XmlNode xn in rows)
{
DataRow dr = dt.NewRow();
for (int i = 0; i < xn.ChildNodes.Count; i++)
{
dr[i] = xn.ChildNodes[i].InnerText;
}
dt.Rows.Add(dr);
}