200分解决一个XML排序问题`麻烦大家了`解决立刻结帖

showmy 2007-09-09 10:50:08

protected void Page_Load(object sender, EventArgs e)
{


StringBuilder unsorted = new StringBuilder();
StringBuilder sorted = new StringBuilder();
string xpath = "//Title";
XPathDocument doc = new XPathDocument(Server.MapPath("~/test.xml"));
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator nodeIter1 = nav.Select(xpath);
while (nodeIter1.MoveNext())
{
unsorted.Append(nodeIter1.Current.GetAttribute("publishtime", "") + "<br/>");
}
Label1.Text = unsorted.ToString();

XPathExpression exp = nav.Compile("//Title[@publishtime]");
exp.AddSort("publishtime", XmlSortOrder.Descending, XmlCaseOrder.None, "", XmlDataType.Number);//按时间倒序
XPathNodeIterator nodeIter2 = nav.Select(exp);
while (nodeIter2.MoveNext())
{
sorted.Append(nodeIter2.Current.GetAttribute("publishtime", "") + "<br/>");
}
Label2.Text = sorted.ToString(); //排序后的所有数据(就是xml文件Title节点的所有属性)需要填充到一个gridview
}

test.xml
<?xml version="1.0" encoding="utf-8"?>
<TitleCollection>
<Title position="1" id="424" title="aaaadsa" publishtime="2007-8-6 0:00:00" pic="~/images/nopig.gif" informationtype="测试" brief="dasdas">
<contentCollection content="dfsfsdfs" />
</Title>
<Title position="2" id="425" title="aa" publishtime="2007-7-31 0:00:00" pic="~/images/nopig.gif" informationtype="新闻" brief="aa">
<contentCollection content="aaa" />
</Title>
</TitleCollection>

今天已经被弄晕了``只有麻烦大家了``
...全文
282 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangxiang5201988 2008-06-28
  • 打赏
  • 举报
回复
用xsl怎么排序的,我被卡在这了,.NET2.0浏览XML是按时间倒序排列的,但页面输出确不是倒序!望给个代码参考~~~
BearRui 2007-09-10
  • 打赏
  • 举报
回复
//
//用XPath实现列的排序
//
XmlDocument doc=new XmlDocument();
doc.Load(@"E:\test.xml");
//创建导航器
XPathNavigator nav=doc.CreateNavigator();
//create XPathExpression
XPathExpression exp=nav.Compile("/ee/message");
//对Size 列进行降序排列
///--------------------------------------------------------
///如要对多列进行排序,须用XPath中的concat这个函数,
///.eg:对tile , lastname2列进行排序:
///exp.AddSort("concat(title,','),lastname)",.........);
///其中的,是分隔作用
///---------------------------------------------------------
exp.AddSort("size",XmlSortOrder.Descending,XmlCaseOrder.None,"",XmlDataType.Number);
//create Iterator
XPathNodeIterator iter=nav.Select(exp);
//循环迭代对象
while(iter.MoveNext())
{
XPathNavigator copy=iter.Current.Clone();
//write the size child node
copy.MoveToFirstChild();
copy.MoveToNext();
copy.MoveToNext();
Console.WriteLine(copy.Value);
}

==============================================================
Xml文件:

<?xml version="1.0" ?>
<ee>
<message>
<time>2004-8-24 11:13:53</time>
<offset>0</offset>
<size>11297</size>
</message>
<message>
<time>2004-8-24 11:13:53</time>
<offset>11297</offset>
<size>11325</size>
</message>
<message>
<time>2004-8-24 11:13:53</time>
<offset>22622</offset>
<size>11309</size>
</message>
<message>
<time>2004-8-24 11:13:53</time>
<offset>33931</offset>
<size>11327</size>
</message>
</ee>
--------------------------------------------------------------
XmlDocument doc=new XmlDocument();
doc.Load(@"e:\2.xml");

//创建导航器
XPathNavigator nav=doc.CreateNavigator();
//create XPathExpression
XPathExpression exp=nav.Compile("/table/list");
exp.AddSort("points",XmlSortOrder.Descending,XmlCaseOrder.None,"",XmlDataType.Number);

//create Iterator
XPathNodeIterator iter=nav.Select(exp);

int i=0;
//循环迭代对象
while(iter.MoveNext())
{
i++;

XPathNavigator copy=iter.Current.Clone();
//移动到points节点
copy.MoveToFirstChild();
copy.MoveToNext();
//转化为xmlnode
XmlNode node=((IHasXmlNode) copy).GetNode();
//设置rank节点
node.ParentNode.ChildNodes[2].InnerText=i.ToString();
}

doc.Save(@"e:\2.xml");
==============================
xml file:

<table>
<list>
<id>1</id>
<points>22</points>
<rank></rank>
</list>
<list>
<id>2</id>
<points>2</points>
<rank></rank>
</list>
<list>
<id>3</id>
<points>32</points>
<rank></rank>
</list>
<list>
<id>4</id>
<points>565</points>
<rank></rank>
</list>
<list>
<id>5</id>
<points>2122</points>
<rank></rank>
</list>
</table>
hflkl1314 2007-09-10
  • 打赏
  • 举报
回复
看看先
showmy 2007-09-10
  • 打赏
  • 举报
回复
结帖 放弃了``还是用xsl实现``唉``没时间去研究了` 谢谢大家`
andyhooo 2007-09-10
  • 打赏
  • 举报
回复
up
JustLovePro 2007-09-10
  • 打赏
  • 举报
回复
mark!
孟子E章 2007-09-09
  • 打赏
  • 举报
回复
例子

public class DTSort : IComparer
{
int IComparer.Compare(Object x, Object y)
{
return DateTime.Compare(Convert.ToDateTime(y),Convert.ToDateTime(x));

}
}

protected void Page_Load(object sender, EventArgs e)
{
StringBuilder unsorted = new StringBuilder();
StringBuilder sorted = new StringBuilder();
string xpath = "//Title";
XPathDocument doc = new XPathDocument(Server.MapPath("~/test.xml"));
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator nodeIter1 = nav.Select(xpath);
while (nodeIter1.MoveNext())
{
unsorted.Append(nodeIter1.Current.GetAttribute("publishtime", "") + "<br/>");
}
Label1.Text = unsorted.ToString();

XPathExpression exp = nav.Compile("//Title[@publishtime]");
DTSort s = new DTSort();
exp.AddSort("@publishtime", s);//按时间倒序
XPathNodeIterator nodeIter2 = nav.Select(exp);
while (nodeIter2.MoveNext())
{
sorted.Append(nodeIter2.Current.GetAttribute("publishtime", "") + "<br/>");
}
Label2.Text = sorted.ToString();
}
孟子E章 2007-09-09
  • 打赏
  • 举报
回复
可以实现,需要实现IComparer
懒牛科技 2007-09-09
  • 打赏
  • 举报
回复
按你这个方法.俺看了半天没有思路,不过,不用dataset也可以做
目前你的程序是添加到StringBuilder,它没有排序的功能.你可以不用
dataset可以用泛型
List<DateTime> list=new List<DateTime>();
这样你就可以add到List.List有排序的功能!

再说,你没有必要非要用你第一次想到的方法,有时放弃是你成熟的表现!
showmy 2007-09-09
  • 打赏
  • 举报
回复
老大们```高手们``
best8625 2007-09-09
  • 打赏
  • 举报
回复
DataSet ds = new DataSet();
ds.ReadXml(您的XML路径);
showmy 2007-09-09
  • 打赏
  • 举报
回复
UP
懒牛科技 2007-09-09
  • 打赏
  • 举报
回复
晕,你这种钻研的精神.........
showmy 2007-09-09
  • 打赏
  • 举报
回复
首先感谢大家`我知道 dataset dataview.sort; 我就是想用这个方法看能不能实现
懒牛科技 2007-09-09
  • 打赏
  • 举报
回复
datatable有排序的功能!
懒牛科技 2007-09-09
  • 打赏
  • 举报
回复
直接有方法把XMl读取为DataSet,把dataset直接帮顶给gridview就可以了!
懒牛科技 2007-09-09
  • 打赏
  • 举报
回复
如果你想把Xml数据显示在GridView中
不必这么麻烦!
showmy 2007-09-09
  • 打赏
  • 举报
回复
在线等`

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧