我通过一个查询接口返回如下string类型 XML字符串
                       <?xml version='1.0' encoding='GBK'?>
                        <root>
                        <head>
                        <code>1</code>
                        <message>数据下载成功!</message>
                        <rownum>1</rownum>
                        </head>
                        <body>
                        <viosurveil id='0'>
                          <clsbdh>4015</clsbdh>
                          <lxfs>012345678</lxfs>
                          <jtfsmc></jtfsmc>
                        </viosurveil>
                        </body></root>
但当我通过DataSet自带的ReadXml 方法转换DataSet时,报 列名“id”是为不同的映射类型定义的。的错误
其中的<viosurveil id='0'> 是随着资料返回条数增加而增加的
如 有俩条时即为<viosurveil id='1'>
以此类推
各位大大们有解决方法或思路吗?

解决方案 »

  1.   

    如果id换个名呢,数据库中id是什么类型字段
    再不行就xmldocument逐条加到dataset吧
      

  2.   

    ID 字段类型 没有给出说明。
    因为是调用人家的接口,返回的XML字符串是不会随便变动结构的。
      

  3.   

    很明显,不是Dataset序列化出来的格式,看看一个DateSet序列化出来的Xml格式,然后转换吧,可以使用Xslt来转换Xml格式,这样做最简单
      

  4.   

    很明显,不是Dataset序列化出来的格式,看看一个DateSet序列化出来的Xml格式,然后转换吧,可以使用Xslt来转换Xml格式,这样做最简单
      

  5.   

    XmlDocument,逐条读取,建DataTable,逐条插进去吧,这样也不是很复杂的。
      

  6.   


    string strXml = "<?xml version='1.0' encoding='GBK'?><root><head><code>1</code><message>数据下载成功!</message><rownum>1</rownum></head>" +
                            "<body><viosurveil id='0'><clsbdh>4015</clsbdh><lxfs>012345678</lxfs><jtfsmc></jtfsmc></viosurveil><viosurveil id='1'><clsbdh>4016</clsbdh><lxfs>012345679</lxfs><jtfsmc></jtfsmc></viosurveil></body></root>";DataSet ds = new DataSet();
    DataTable dt = new DataTable("viosurveil");
    dt.Columns.Add("id");
    dt.Columns.Add("clsbdh");
    dt.Columns.Add("lxfs");
    dt.Columns.Add("jtfsmc");XmlDocument doc = new XmlDocument();
    doc.LoadXml(strXml);
    XmlNodeList nodes = doc.DocumentElement.SelectNodes("body/viosurveil");
    foreach (XmlNode node in nodes)
    {
        string id = node.Attributes["id"].Value;
        string clsbdh = node.SelectSingleNode("clsbdh").InnerText;
        string lxfs = node.SelectSingleNode("lxfs").InnerText;
        string jtfsmc = node.SelectSingleNode("jtfsmc").InnerText;
        dt.Rows.Add(id, clsbdh, lxfs, jtfsmc);
    }
    ds.Tables.Add(dt); 
      

  7.   

    嘿嘿,缘分啊,你也做04C03接口。给你个做简单的办法:xmlds.ReadXml(new XmlTextReader(xmldoc.Replace("id=","abc="), XmlNodeType.Document, null), XmlReadMode.InferSchema);