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:遍历节点集合。