一聚教程网:一个值得你收藏的教程网站

热门教程

XPathExpression类对XML进行排序

时间:2022-06-25 06:35:58 编辑:袖梨 来源:一聚教程网

xpathexpression类对xml进行排序

在.net平台下,要完成这样的工作非常轻松,我们只需使用system.xml.xpath名字空间里的几个类即可,如 xpathnavigator和xpathexpression。这些类相当于xslt中xpath的功能,允许你在xml文档中进行遍历,也可以进行排 序的操作。下面是对system.xml.xpath名字空间中的类进行的简单的描述:

由于要详细讨论每一个类的细节,超出了我们主题的范围,我们只讨论与排序有关的那些类的使用。首先,我们需要创建一个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,
     xmlcaseo教程rder 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();
 }


xpathdocument:进行xml文档处理时,提供一个快速、有效的、只读的cache功能,在进行xslt转换时,推荐使用该类。

xpathexception:当处理xpath产生错误时,抛出一个例外。

xpathexpression:保存在调用xpathnavigator的compile()方法时生成的、经过编译的xpath表达式。

xpathnavigator:提供一个指针模型,供我们读取支持ixpathnavigable接口的所保存的任何类型的数据。

xpathnodeiterator:遍历节点集合。

热门栏目