XPathExpression.AddSort 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在派生类中重写时,对 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 对象的值。
例外
或 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。
另请参阅
- XmlSortOrder
- XmlCaseOrder
- XmlDataType
- XmlNamespaceManager
- CultureInfo
- Compare
- SetContext(XmlNamespaceManager)