<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    如 果你曾經使用過XSLT,當你需要對XML文檔中的字符串或數字進行排序時,你可能會習慣于使用xsl:sort元素,在進行xsl:for-each進 行循環或用xsl:apply-templates調用模板時,這個元素的功能很方便,而且簡單。然而,在某些情況下,你只是想簡單對XML文檔進行簡單 的排序和顯示數據,那么xsl:sort就會大大降低計算機性能,下面就解釋一下,如何在不使用xsl:sort元素的情況下,實現對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?+?"<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();
    ?}



    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
    、轉載請注明來處和原文作者。非常感謝。

    posted on 2006-04-21 16:07 草兒 閱讀(189) 評論(0)  編輯  收藏 所屬分類: C#+XML
    主站蜘蛛池模板: 狠狠入ady亚洲精品| 亚洲免费在线观看视频| 最好2018中文免费视频| 特级淫片国产免费高清视频| 亚洲欧洲日产v特级毛片| 2019中文字幕免费电影在线播放| 久久狠狠高潮亚洲精品| 亚洲免费观看在线视频| 亚洲大尺码专区影院| 美女视频黄a视频全免费| 亚洲综合在线一区二区三区| 狼友av永久网站免费观看| 怡红院亚洲红怡院在线观看| 国产一级一片免费播放i| 曰批免费视频播放免费| 亚洲婷婷国产精品电影人久久| 久99久无码精品视频免费播放| 亚洲乱码无码永久不卡在线| 久草视频在线免费看| 亚洲欧洲日产韩国在线| 看全色黄大色大片免费久久| 一个人看的免费高清视频日本| 亚洲区小说区激情区图片区| 18禁止看的免费污网站| 亚洲一区二区三区写真| 亚洲国产aⅴ综合网| 日本免费大黄在线观看| 亚洲中文字幕无码亚洲成A人片| www.91亚洲| 久久免费视频99| 亚洲人成电影网站色www| 美腿丝袜亚洲综合| 免费能直接在线观看黄的视频| 亚洲AV成人一区二区三区观看 | 久久笫一福利免费导航| 亚洲精品无码久久久久YW| 情人伊人久久综合亚洲| 在线a级毛片免费视频| 国产精品免费看久久久香蕉| 亚洲日本乱码一区二区在线二产线 | 美女羞羞喷液视频免费|