XPathExpression类对XML进行排序
来源: 阅读:741 次 日期:2015-08-26 15:22:47
温馨提示: 小编为您整理了“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 + "<br />");

}

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 + "<br />");

}

this.lblsorted.text = sorted.tostring();

}

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

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

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

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

xpathnodeiterator:遍历节点集合。

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map