我现在要做一个接口,接收到的是string型的以xml格式组成的库结构及数据,我该怎么去解析这个字符串呢?

解决方案 »

  1.   

    字符串格式如下
    <?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的值
      

  2.   

    System.Xml.XmlDocument 类
    LoadXml 方法 
    然后 ReadNode      
      

  3.   

    参考
    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
      

  4.   

    参考下面的代码,test.xml用的就是你的数据,要直接用string参数,就使用XmlDocument.LoadXml(string)。
    你需要自己实现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;            
            }
      

  5.   

    DataView dv = ds.Tables[0].DefaultView;
                dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = dv;
      

  6.   

    对的,不用解析的,使用XmlDocument对象的LoadXml方法把你的xml字符串读进来,它会自动解析的
    然后你再使用SelectNodes等方法结合XPath,把需要的节点选出来即可。
      

  7.   


                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);
                }