200分解决一个XML排序问题`麻烦大家了`解决立刻结帖
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>
今天已经被弄晕了``只有麻烦大家了``
[解决办法]
如果你想把Xml数据显示在GridView中
不必这么麻烦!
[解决办法]
DataSet ds = new DataSet();
ds.ReadXml(您的XML路径);
[解决办法]
例子
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();
}
[解决办法]
mark!
[解决办法]
up
[解决办法]
看看先
[解决办法]
//
//用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>