扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者: 来源:中国软件网 2008年6月23日
关键字: 排序 XPathExpression XML 软件
在.NET平台下,要完成这样的工作非常轻松,我们只需使用System.Xml.XPath名字空间里的几个类即可,如XPathNavigator和XPathExpression。这些类相当于XSLT中XPath的功能,允许你在XML文档中进行遍历,也可以进行排序的操作。下面是对System.Xml.XPath名字空间中的类进行的简单的描述:
XPathDocument:进行XML文档处理时,提供一个快速、有效的、只读的Cache功能,在进行XSLT转换时,推荐使用该类。
XPathException:当处理XPath产生错误时,抛出一个例外。
XPathExpression:保存在调用XPathNavigator的Compile()方法时生成的、经过编译的XPath表达式。
XPathNavigator:提供一个指针模型,供我们读取支持IXPathNavigable接口的所保存的任何类型的数据。
XPathNodeIterator:遍历节点集合。
由于要详细讨论每一个类的细节,超出了我们主题的范围,我们只讨论与排序有关的那些类的使用。首先,我们需要创建一个XPathNavigator对象,以便建立XPath表达式来完成我们的排序功能。由于这个类是一个抽象类,我们不能这样直接创建它:
XPathNavigator nav = new XPathNavigator();
我们必须使用XmlDocument、XmlDataDocument或XPathDocument的CreateNavigator()方法来创建:
XPathDocument doc = new XPathDocument(Server.MapPath("customers.xml"));
XPathNavigator nav = doc.CreateNavigator();
创建了XPathNavigator对象后,我们就可以使用Compile()方法编译一个XPath表达式,这个方法返回一个XPathExpression 类,它封装编译过的表达式,同时允许我们进行排序。下面是一个使用XPathNavigator类创建一个编译过的XPath表达式的例子:
XPathExpression exp = nav.Compile(xpath);
我们通过使用XPathExpression对象的AddSort()方法实现排序的功能,这个方法有两个重载的方式: public abstract void AddSort(object expr, IComparer comparer);public abstract void AddSort(object expr,XmlSortOrder order,XmlCaseOrder caseOrder,string lang,XmlDataType dataType);
第一个方法允许我们使用自定义的排序表达式;第二个方法有5个参数:分别是要排序的对象、排序顺序、条件顺序、语言类别和数据类型,下面就是使用该方法进行排序的例子: exp.AddSort("text()",
XmlSortOrder.Ascending,XmlCaseOrder.None,"",XmlDataType.Text);
一旦我们对XPath表达式添加了排序的功能,我们就可以调用XPathNavigator对象的Select()方法,并把编译过的XPath表达式作为参数,Select()方法返回一个XPathNodeIterator对象,我们可以使用它遍历我们所选择的节点。
下面就是用C#编写的实现排序功能的所有代码:
private void Page_Load(object sender, System.EventArgs e) {StringBuilder unsorted = new StringBuilder();StringBuilder sorted = new StringBuilder();string xpath = "/Customers/Customer/ContactName";XPathDocument doc = new XPathDocument(Server.MapPath("customers.xml"));XPathNavigator nav = doc.CreateNavigator();XPathNodeIterator nodeIter1 = nav.Select(xpath);while (nodeIter1.MoveNext()) {unsorted.Append(nodeIter1.Current.Value + "
");}this.lblUnsorted.Text = unsorted.ToString();XPathExpression exp = nav.Compile(xpath);exp.AddSort("text()",XmlSortOrder.Ascending,XmlCaseOrder.None,"",XmlDataType.Text);XPathNodeIterator nodeIter2 = nav.Select(exp);while (nodeIter2.MoveNext()) {sorted.Append(nodeIter2.Current.Value + "
");} this.lblSorted.Text = sorted.ToString();}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者