使用XPathExpression類對XML進行排序 (轉)
使用Expression類對進行排序
.NET_lover
如果你曾經使用過T,當你需要對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 e= nav.Compile(xpath);
我們透過使用XPathExpression物件的AddSort()方法實現排序的功能,這個方法有兩個過載的方式:
public abstract void AddSort( 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物件的()方法,並把編譯過的XPath表示式作為引數,Select()方法返回一個XPathNodeIterator物件,我們可以使用它遍歷我們所選擇的節點。
下面就是用編寫的實現排序功能的所有程式碼:
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();
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992091/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用JAXP對xml文件進行DOM解析基礎XML
- 對字典進行排序排序
- 使用Collections對list的內容進行排序排序
- Python對字典進行排序Python排序
- 使用jaxp解析器dom方式對xml節點進行操作XML
- python 對字典的值進行排序Python排序
- sap 內錶轉xml,類的使用if_ixml_elementXML
- ORDER對查詢結果進行排序排序
- 一個命令對文字進行高效排序排序
- Java使用Collections對中文字元進行首字母排序Java字元排序
- JavaScript 使用sort()方法從數值上對陣列進行排序JavaScript陣列排序
- C# 中使用Linq和Lambda表示式對List進行排序C#排序
- XML轉化為json工具類XMLJSON
- 如何在Python中對dicts列表進行排序Python排序
- 如何在dhtmlxGantt網格中對任務進行排序和重新排序HTML排序
- Django(76)isort工具對import匯入進行排序DjangoImport排序
- 147. 對連結串列進行插入排序排序
- 對N個數進行從大到小排序排序
- 用xgboost模型對特徵重要性進行排序模型特徵排序
- 如何使用Python、Transformers和scikit-learn對文字進行分類?PythonORM
- python-進階教程-使用物件屬性進行排序Python物件排序
- 使用 Transformers 進行圖分類ORM
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- Collections工具類,可以使用collections工具類對程式碼中的list進行分組
- 使用springboot對linux進行操控Spring BootLinux
- Java stream sorted使用 Comparator 進行多欄位排序Java排序
- 使用 chunkById 方法的時候請不要進行排序排序
- 力扣 147. 對連結串列進行插入排序力扣排序
- Tetrate - 使用Istio進行gRPC轉碼RPC
- Visio對一個物件進行水平翻轉物件
- 在.net中使用AutoMapper進行物件對映,物件相互轉,簡單方便APP物件
- 對 LLM 工具使用進行統一
- 對XAML進行編輯的輔助類(XamlHelper)
- sqlserver使用order by case when進行優先順序排序SQLServer排序
- 直播app開發,對字串中字元進行自然順序排序APP字串字元排序
- ORA_ROWSCN與按照commit時間對記錄進行排序MIT排序
- Python對HTML跳脫字元進行反轉義PythonHTML字元
- js中對URL進行轉碼與解碼JS
- Mybatis XML檔案中,對java.util.Date物件的值到轉換為執行SQL進行比較所做的隱式行為分析。MyBatisXMLJava物件SQL