XPathExpression.AddSort 方法

定義

在衍生類別中覆寫時,對 XPath 運算式所選取的節點進行排序。

多載

AddSort(Object, IComparer)

在衍生類別中覆寫時,根據指定的 IComparer 物件,對 XPath 運算式所選取的節點進行排序。

AddSort(Object, XmlSortOrder, XmlCaseOrder, String, XmlDataType)

在衍生類別中進行覆寫時,根據提供的參數來排序 XPath 運算式所選取的節點。

AddSort(Object, IComparer)

在衍生類別中覆寫時,根據指定的 IComparer 物件,對 XPath 運算式所選取的節點進行排序。

public:
 abstract void AddSort(System::Object ^ expr, System::Collections::IComparer ^ comparer);
public abstract void AddSort (object expr, System.Collections.IComparer comparer);
abstract member AddSort : obj * System.Collections.IComparer -> unit
Public MustOverride Sub AddSort (expr As Object, comparer As IComparer)

參數

expr
Object

表示排序鍵的物件。 這可以是節點的 string 值或具有已編譯 XPath 運算式的 XPathExpression 物件。

comparer
IComparer

IComparer 物件,提供特定資料型別比較,以比較兩個物件是否等價。

例外狀況

XPathExpression 或排序鍵包含前置詞,而且未提供 XmlNamespaceManager 或所提供的 XmlNamespaceManager 中找不到前置詞。

備註

方法 AddSort 可讓使用者依資料類型排序物件,而不是依字串或數位排序物件。 物件 IComparer 提供 方法的實作 Compare ,可支援對使用者定義類別進行排序。

在下列範例中,書籍會依 ISBN 編號排序,其中 isbn 是實作 IComparer 介面的物件。

Dim expression As XPathExpression = navigator.Compile("bookstore/book")  
Dim isbn As ISBN = New ISBN()  
expression.AddSort("@ISBN", (IComparer)isbn)  
XPathExpression expression = navigator.Compile("bookstore/book");  
ISBN isbn = new ISBN();  
expression.AddSort("@ISBN", (IComparer)isbn);  

以下是使用 AddSort 方法時要考慮的重要注意事項。

  • 加入排序的順序會提供排序索引鍵順序。

  • XPathExpression如果 或 排序索引鍵需要命名空間解析,您必須使用 SetContext 方法來提供 XmlNamespaceManager 命名空間解析的 。

  • XPathExpression如果 不包含前置詞,則會假設命名空間統一資源識別項 (URI) 是空的命名空間。 如果您的 XML 包含預設命名空間,您仍然 SetContext 必須使用 方法,並提供 XmlNamespaceManager 包含前置詞和命名空間 URI 的 ,以處理預設命名空間。

另請參閱

適用於

AddSort(Object, XmlSortOrder, XmlCaseOrder, String, XmlDataType)

在衍生類別中進行覆寫時,根據提供的參數來排序 XPath 運算式所選取的節點。

public:
 abstract void AddSort(System::Object ^ expr, System::Xml::XPath::XmlSortOrder order, System::Xml::XPath::XmlCaseOrder caseOrder, System::String ^ lang, System::Xml::XPath::XmlDataType dataType);
public abstract void AddSort (object expr, System.Xml.XPath.XmlSortOrder order, System.Xml.XPath.XmlCaseOrder caseOrder, string lang, System.Xml.XPath.XmlDataType dataType);
abstract member AddSort : obj * System.Xml.XPath.XmlSortOrder * System.Xml.XPath.XmlCaseOrder * string * System.Xml.XPath.XmlDataType -> unit
Public MustOverride Sub AddSort (expr As Object, order As XmlSortOrder, caseOrder As XmlCaseOrder, lang As String, dataType As XmlDataType)

參數

expr
Object

表示排序鍵的物件。 這可以是節點的 string 值或具有已編譯 XPath 運算式的 XPathExpression 物件。

order
XmlSortOrder

XmlSortOrder 值會表示排序順序。

caseOrder
XmlCaseOrder

XmlCaseOrder 值會表示如何排序大寫和小寫字母。

lang
String

要用於比較的語言。 使用可傳遞至 CultureInfo 方法的 Compare 類別表示語言類型,例如 "us-en" 表示「英文 (美國)」。 如果指定空字串,則此系統環境會用來判斷 CultureInfo

dataType
XmlDataType

XmlDataType 值會表示資料類型的排序次序。

例外狀況

XPathExpression 或排序鍵包含前置詞,而且未提供 XmlNamespaceManager 或所提供的 XmlNamespaceManager 中找不到前置詞。

範例

下列範例示範如何依價格以遞減順序排序書籍檔。

Imports System.Xml
Imports System.Xml.XPath

Module Module1

    Sub Main()
        Dim doc As New XPathDocument("contosoBooks.xml")
        Dim nav As XPathNavigator = doc.CreateNavigator()

        Dim expr As XPathExpression
        expr = nav.Compile("/bookstore/book")

        expr.AddSort("price", XmlSortOrder.Descending, _
                          XmlCaseOrder.None, "", XmlDataType.Number)

        Dim iterator As XPathNodeIterator = nav.Select(expr)
        Do While iterator.MoveNext()

            If (iterator.Current.HasChildren()) Then
                Dim childIter As XPathNodeIterator = _
                iterator.Current.SelectChildren(XPathNodeType.Element)
                Do While childIter.MoveNext()
                    Console.WriteLine(childIter.Current.Value)
                Loop

            End If
        Loop

    End Sub

End Module
using System;
using System.Xml;
using System.Xml.XPath;

namespace SortBooks
{
    class Program
    {
        static void Main(string[] args)
        {
            XPathDocument doc = new XPathDocument("contosoBooks.xml");
            XPathNavigator nav = doc.CreateNavigator();

            XPathExpression expr;
            expr = nav.Compile("/bookstore/book");

            expr.AddSort("price", XmlSortOrder.Descending,
                           XmlCaseOrder.None, "", XmlDataType.Number);

            XPathNodeIterator iterator = nav.Select(expr);
            while (iterator.MoveNext())
            {
                if (iterator.Current.HasChildren)
                {
                    XPathNodeIterator childIter =
              iterator.Current.SelectChildren(XPathNodeType.Element);
                    while (childIter.MoveNext())
                    {
                        Console.WriteLine(childIter.Current.Value);
                    }
                }
            }
        }
    }
}

該範例採用 books.xml 檔案做為輸入。

<?xml version="1.0" encoding="utf-8" ?>   
<bookstore>  
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">  
        <title>The Autobiography of Benjamin Franklin</title>  
        <author>  
            <first-name>Benjamin</first-name>  
            <last-name>Franklin</last-name>  
        </author>  
        <price>8.99</price>  
    </book>  
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">  
        <title>The Confidence Man</title>  
        <author>  
            <first-name>Herman</first-name>  
            <last-name>Melville</last-name>  
        </author>  
        <price>11.99</price>  
    </book>  
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">  
        <title>The Gorgias</title>  
        <author>  
            <name>Plato</name>  
        </author>  
        <price>9.99</price>  
    </book>  
</bookstore>  

備註

  • 加入排序的順序會提供排序索引鍵順序。

  • XPathExpression如果 或 排序索引鍵需要命名空間解析,您必須使用 SetContext 方法來提供 XmlNamespaceManager 命名空間解析的 。

  • XPathExpression如果 不包含前置詞,則會假設命名空間統一資源識別項 (URI) 是空的命名空間。 如果您的 XML 包含預設命名空間,您仍然 SetContext 必須使用 方法,並提供 XmlNamespaceManager 包含前置詞和命名空間 URI 的 ,以處理預設命名空間。

另請參閱

適用於