<?xml version="1.0" standalone="yes" ?> 
<NewsContent>
  <ContentList>
  <Id>1</Id> 
  <Title>caoying168</Title> 
  <CreateDate>2008-08-06</CreateDate> 
  <eType>1</eType> 
  <Url>323243434234342.html</Url> 
  </ContentList>
   
  <ContentList>
  <Id>2</Id> 
  <Title>caoying168</Title> 
  <CreateDate>2008-08-06</CreateDate> 
  <eType>2</eType> 
  <Url>323243434234342.html</Url> 
  </ContentList>  <ContentList>
  <Id>3</Id> 
  <Title>caoying168</Title> 
  <CreateDate>2008-09-06</CreateDate> 
  <eType>2</eType> 
  <Url>323243434234342.html</Url> 
  </ContentList>  <ContentList>
  <Id>4</Id> 
  <Title>caoying168</Title> 
  <CreateDate>2008-09-06</CreateDate> 
  <eType>2</eType> 
  <Url>323243434234342.html</Url> 
  </ContentList>  <ContentList>
  <Id>5</Id> 
  <Title>caoying168</Title> 
  <CreateDate>2008-09-06</CreateDate> 
  <eType>2</eType> 
  <Url>323243434234342.html</Url> 
  </ContentList></NewsContent>
要求每次把<eType>不同的标记,按id降序取1个出来,比如所有<eType>的值为1,2,3,4,那么取出来的记录如下:
eType   id               ...
1       同类id最大的       ...
2       同类id最大的       ...
3       同类id最大的       ...
4       同类id最大的       ...
初步想了一个办法,但不知道C#的dataview有没有distinct,如果有的话,先取eType,再根据eType一个一个的取,感觉好麻烦,请教xml高手,有其它简单的办法吗(xml可以重新设计),我用的系统是.net1.1,vs2003,谢谢!

解决方案 »

  1.   

    利用ArrayList的Sort方法进行排序。
      

  2.   


    //用dataset把xml读进来,用dataview视图排序DataView dv = new DataView(); 
    dv.Table = ds.Tables[0]; 
    //dv.RowFilter = "Title like 'caoying%'";  //如果需要过滤
    dv.Sort = "eType ASC";    //排序条件
    ...
    不知道跟distinct有什么关系?要去重?
      

  3.   

    要去重的话.net2.0也有简单方法//先把DataTable转成DataView,再通过DataView.ToTable()转回DataTable,
    ToTable()方法中有一个重载可以轻松消除重复行.(后边的字段可以继续添加需要过滤的重复字段)如下:过滤属性为eType属性重复数据的datatableDataTable dtPartpower=dsPartpower.Tables[0].DefaultView.ToTable(true, "eType");
      

  4.   

    取数据好取用xpath表达式 
    用NameValueCollection(1.1有吗?)来的key来存eType  用value来存ID
      

  5.   

    DataTable dtPartpower=dsPartpower.Tables[0].DefaultView.ToTable(true, "eType"); 
      

  6.   

    把XML读入到dataset,然后用dateview.sort
      

  7.   

    其实没解决,1.1根本没有.ToTable,再顶一下,等沉了就结帖
      

  8.   

    参考如下代码
    Dictionary<int, int> dic = new Dictionary<int, int>();
    XmlDocument doc = new XmlDocument();
    doc.Load(yourfile);
    XmlNodeList list = doc.SelectNodes("/NewsContent/ContentList");
    foreach (XmlNode node in list)
    {
        int etype = Convert.ToInt32(node.ChildNodes[4].InnerText);
        int id = Convert.ToInt32(node.ChildNodes[1].InnerText);
        if (dic.ContainsKey(etype))
        {
            dic[etype] = Math.Max(id, dic[etype]);
        }
        else
        {
            dic[etype] = id;
        }
    }最后的dic就是你的结果~~~~
      

  9.   

    //用dataset把xml读进来,用dataview视图排序DataView dv = new DataView(); 
    dv.Table = ds.Tables[0]; 
    //dv.RowFilter = "Title like 'caoying%'";  //如果需要过滤
    dv.Sort = "eType ASC";    //排序条件————————————Dictionary<int, int> dic = new Dictionary<int, int>();
    XmlDocument doc = new XmlDocument();
    doc.Load(yourfile);
    XmlNodeList list = doc.SelectNodes("/NewsContent/ContentList");
    foreach (XmlNode node in list)
    {
        int etype = Convert.ToInt32(node.ChildNodes[4].InnerText);
        int id = Convert.ToInt32(node.ChildNodes[1].InnerText);
        if (dic.ContainsKey(etype))
        {
            dic[etype] = Math.Max(id, dic[etype]);
        }
        else
        {
            dic[etype] = id;
        }
    }