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

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

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

    無為

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

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    如 果你曾經(jīng)使用過XSLT,當(dāng)你需要對(duì)XML文檔中的字符串或數(shù)字進(jìn)行排序時(shí),你可能會(huì)習(xí)慣于使用xsl:sort元素,在進(jìn)行xsl:for-each進(jìn) 行循環(huán)或用xsl:apply-templates調(diào)用模板時(shí),這個(gè)元素的功能很方便,而且簡(jiǎn)單。然而,在某些情況下,你只是想簡(jiǎn)單對(duì)XML文檔進(jìn)行簡(jiǎn)單 的排序和顯示數(shù)據(jù),那么xsl:sort就會(huì)大大降低計(jì)算機(jī)性能,下面就解釋一下,如何在不使用xsl:sort元素的情況下,實(shí)現(xiàn)對(duì)XML數(shù)據(jù)進(jìn)行排 序。?

    在.NET平臺(tái)下,要完成這樣的工作非常輕松,我們只需使用System.Xml.XPath名字空間里的幾個(gè)類即可,如XPathNavigator和 XPathExpression。這些類相當(dāng)于XSLT中XPath的功能,允許你在XML文檔中進(jìn)行遍歷,也可以進(jìn)行排序的操作。下面是對(duì) System.Xml.XPath名字空間中的類進(jìn)行的簡(jiǎn)單的描述:?


    XPathDocument:進(jìn)行XML文檔處理時(shí),提供一個(gè)快速、有效的、只讀的Cache功能,在進(jìn)行XSLT轉(zhuǎn)換時(shí),推薦使用該類。?

    XPathException:當(dāng)處理XPath產(chǎn)生錯(cuò)誤時(shí),拋出一個(gè)例外。?

    XPathExpression:保存在調(diào)用XPathNavigator的Compile()方法時(shí)生成的、經(jīng)過編譯的XPath表達(dá)式。?

    XPathNavigator:提供一個(gè)指針模型,供我們讀取支持IXPathNavigable接口的所保存的任何類型的數(shù)據(jù)。?

    XPathNodeIterator:遍歷節(jié)點(diǎn)集合。?

    由于要詳細(xì)討論每一個(gè)類的細(xì)節(jié),超出了我們主題的范圍,我們只討論與排序有關(guān)的那些類的使用。首先,我們需要?jiǎng)?chuàng)建一個(gè)XPathNavigator對(duì)象,以便建立XPath表達(dá)式來完成我們的排序功能。由于這個(gè)類是一個(gè)抽象類,我們不能這樣直接創(chuàng)建它:?

    ?
    ??XPathNavigator?nav?=?new?XPathNavigator();

    我們必須使用XmlDocument、XmlDataDocument或XPathDocument的CreateNavigator()方法來創(chuàng)建:?

    ??
    ??XPathDocument?doc?=?new?XPathDocument(Server.MapPath("customers.xml"));
    ??XPathNavigator?nav?=?doc.CreateNavigator();

    創(chuàng)建了XPathNavigator對(duì)象后,我們就可以使用Compile()方法編譯一個(gè)XPath表達(dá)式,這個(gè)方法返回一個(gè) XPathExpression?類,它封裝編譯過的表達(dá)式,同時(shí)允許我們進(jìn)行排序。下面是一個(gè)使用XPathNavigator類創(chuàng)建一個(gè)編譯過的 XPath表達(dá)式的例子:?

    ?
    ??XPathExpression?exp?=?nav.Compile(xpath);

    我們通過使用XPathExpression對(duì)象的AddSort()方法實(shí)現(xiàn)排序的功能,這個(gè)方法有兩個(gè)重載的方式:?

    ??public?abstract?void?AddSort(object?expr,?IComparer?comparer);
    ??
    ??public?abstract?void?AddSort(
    ?????object?expr,
    ?????XmlSortOrder?order,
    ?????XmlCaseOrder?caseOrder,
    ?????string?lang,
    ?????XmlDataType?dataType
    ??);

    第一個(gè)方法允許我們使用自定義的排序表達(dá)式;第二個(gè)方法有5個(gè)參數(shù):分別是要排序的對(duì)象、排序順序、條件順序、語言類別和數(shù)據(jù)類型,下面就是使用該方法進(jìn)行排序的例子:?

    ?
    ??exp.AddSort("text()",XmlSortOrder.Ascending,XmlCaseOrder.None,"",XmlDataType.Text);

    一旦我們對(duì)XPath表達(dá)式添加了排序的功能,我們就可以調(diào)用XPathNavigator對(duì)象的Select()方法,并把編譯過的XPath表達(dá)式作 為參數(shù),Select()方法返回一個(gè)XPathNodeIterator對(duì)象,我們可以使用它遍歷我們所選擇的節(jié)點(diǎn)。?

    下面就是用C#編寫的實(shí)現(xiàn)排序功能的所有代碼:?

    ?
    ?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();
    ?}



    凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
    、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。

    posted on 2006-04-21 16:07 草兒 閱讀(189) 評(píng)論(0)  編輯  收藏 所屬分類: C#+XML
    主站蜘蛛池模板: 日本一线a视频免费观看| 亚洲乱码日产一区三区| 免费福利资源站在线视频| 亚洲色欲久久久综合网东京热 | 久久久久久国产精品免费免费男同| 亚洲黄色在线电影| 国产在线ts人妖免费视频| 久久久精品免费国产四虎| 亚洲精品久久无码av片俺去也| 亚洲一区二区视频在线观看| 日本不卡免费新一区二区三区| 亚洲中文字幕久久精品无码VA| 国产午夜亚洲精品理论片不卡 | 亚洲国产成人超福利久久精品| 拔擦拔擦8x华人免费久久| 久久免费国产精品一区二区| 亚洲色大成网站www久久九| 亚洲中文字幕无码久久综合网| 国产在线国偷精品产拍免费| 中文字幕免费在线视频| 亚洲国产精品无码久久| 亚洲精品私拍国产福利在线| 国产成人在线观看免费网站 | 久久精品国产亚洲av天美18| 亚洲av无码一区二区三区网站 | 免费一看一级毛片| 在线观看av永久免费| a级片免费观看视频| www亚洲精品久久久乳| 亚洲一区二区三区亚瑟| 亚洲av综合av一区| 亚洲欧洲中文日韩久久AV乱码| 国产精品成人免费视频网站京东| 嫩草成人永久免费观看| 国产精品福利在线观看免费不卡| 亚洲熟女综合一区二区三区| 亚洲国产韩国一区二区| 亚洲AV无码精品无码麻豆| 亚洲综合精品香蕉久久网| 免费中文字幕不卡视频| 小小影视日本动漫观看免费|