<?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,谢谢!
//用dataset把xml读进来,用dataview视图排序DataView dv = new DataView();
dv.Table = ds.Tables[0];
//dv.RowFilter = "Title like 'caoying%'"; //如果需要过滤
dv.Sort = "eType ASC"; //排序条件
...
不知道跟distinct有什么关系?要去重?
ToTable()方法中有一个重载可以轻松消除重复行.(后边的字段可以继续添加需要过滤的重复字段)如下:过滤属性为eType属性重复数据的datatableDataTable dtPartpower=dsPartpower.Tables[0].DefaultView.ToTable(true, "eType");
用NameValueCollection(1.1有吗?)来的key来存eType 用value来存ID
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就是你的结果~~~~
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;
}
}