<?xml version="1.0" encoding="UTF-8" ?>
<DataList  Date="2010-03-30">
      <Ds Qid="1490" Type="1" >
     <Mx>
  <itme   Code="P" Price="100" R="2.5"/>
  <itme   Code="P" Price="120" R="1.5"/>
 
    </Mx>
       </Ds>
        <Ds Qid="1491" Type="2" >
     <Mx>
  <itme   Code="P" Price="200" R="5.5/>
  <itme   Code="P" Price="220" R="6.5/>
 
    </Mx>
       </Ds>
       .......</DataList>[asp.net 1.1下能运行]
我会得到一个如上面的xml,现在的问题是我想快速做一个处理就是对R="XX" 项统一做减 1 比如 R="2.5" 应为  R="1.5"这样操作。由于结果需要输出为json 希望修改后结果 System.Data.DataTable 格式方式保存,另请注意一下代码速度问题,现在程序中的xml已接近200K了
谢谢

解决方案 »

  1.   

    可以用xmlreader来解析xml并将r减1,解析的时候自己直接拼出json,这样可以吗,不用datatable
      

  2.   

    现在用SelectNodes 手工处理
      

  3.   

    200K不是很大吧 ,前几天做了一个40M的文件,用xmldocument解析两次,花费10秒钟。=.=实在考虑性能就用xmlreader,我找个例子
    //1.获取所有类别列表public DataTable GetClasses()
    {
        DataTable tb = new DataTable();
        tb.TableName = "ClassList";
        tb.Columns.Add(new DataColumn("ID", typeof(string)));
        tb.Columns.Add(new DataColumn("Name", typeof(string)));    XmlReader reader = new XmlTextReader(HttpContext.Current.Server.MapPath(UserClassPath));
        while (reader.Read())
        {
            //如果节点为名Article的元素节点
            if (reader.NodeType == XmlNodeType.Element && reader.Name == "Class")
            {
                DataRow r = tb.NewRow();
                r[0] = reader.GetAttribute(0);
                r[1] = reader.GetAttribute(1);
                tb.Rows.Add(r);
            }
        }
        reader.Close();
        reader = null;
        return tb;
    }
      

  4.   

     if (reader.NodeType == XmlNodeType.Element && reader.Name == "Class")
    没看太明白,怎么取到节点并处理呢,
    这里的难点是如何快速找到值并替换,我现在是取出所有数据重新组装,有点慢
      

  5.   

    DataSet.ReadXml(XmlTextReader xr)
      

  6.   

    为什么不在DATATABLE中做处理呢?
      

  7.   

    源数据是xml字符串。我dom.LoadXml 后,再用手工拼接分完成
      

  8.   

    我现在主要是想排序,所以要装到table中
      

  9.   


    DataSet ds = new DataSet("alert");
    try
    {
        ds.ReadXml(fileName);
    }
    catch
    {
        _alertConfigDs = null;}
    _alertConfigDs = ds;