XPathExpression.AddSort 方法

定义

在派生类中重写时,对 XPath 表达式选择的节点进行排序。

重载

名称 说明
AddSort(Object, IComparer)

在派生类中重写时,根据指定的 IComparer 对象对 XPath 表达式选择的节点进行排序。

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

在派生类中重写时,根据提供的参数对 XPath 表达式选择的节点进行排序。

AddSort(Object, IComparer)

Source:
XPathExpr.cs
Source:
XPathExpr.cs
Source:
XPathExpr.cs
Source:
XPathExpr.cs
Source:
XPathExpr.cs

在派生类中重写时,根据指定的 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 来处理默认命名空间的前缀和命名空间 URI。

另请参阅

适用于

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

Source:
XPathExpr.cs
Source:
XPathExpr.cs
Source:
XPathExpr.cs
Source:
XPathExpr.cs
Source:
XPathExpr.cs

在派生类中重写时,根据提供的参数对 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 来处理默认命名空间的前缀和命名空间 URI。

另请参阅

适用于