zoukankan      html  css  js  c++  java
  • 使用XPathExpression类对XML文件进行排序

      
    使用XPathExpression可以对xml文件内容的节点按照某一个属性列进行排序。假设我们有这样的一个xml文件,其内容如下所示:

    <cities>
      <city name="beijing" number="001"/>
      <city name="shanghai" number="002">
      <city name="dalian" number="004">
      <city name="shenzhen" number="003">
    </cities>

    如何对这个xml文件以name属性进行节点的排序呢?请看如下代码:

    private string SortXmlFile(string xmlString)
    {
    StringBuilder sb = null;
    using (StringReader st = new StringReader(xmlString))
    {
    XPathDocument xpDoc = new XPathDocument(st);
    XPathNavigator xpNav = xpDoc.CreateNavigator();

    sb = new StringBuilder(@"<cities>");
    XPathExpression xpExp = xpNav.Compile(@"cities/city");
    xpExp.AddSort("@name", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);
    XPathNodeIterator xpNodeIter = xpNav.Select(xpExp);
    while (xpNodeIter.MoveNext())
    {
    sb.AppendLine(xpNodeIter.Current.OuterXml);
    }
    sb.AppendLine(@"</cities>");
    }
    return sb.ToString();
    }

    返回的字符串便是排序后的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("cities.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对象,我们可以使用它遍历我们所选择的节点。

  • 相关阅读:
    字符串操作函数5!!
    字符串操作函数4
    字符串操作函数3
    java开发命名规范总结
    centerOS网络NAT和桥接
    input框的内容变化监听
    Xunsearch迅搜项目实战经验
    PHP网络爬虫之CURL学习
    Xunsearch的使用总结
    Xshell 5 过期
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/2211200.html
Copyright © 2011-2022 走看看