Прочитать на английском

Поделиться через


XPathNavigator.Select Метод

Определение

Выбирает набор узлов с помощью заданного выражения XPath.

Перегрузки

Select(String)

Выбирает набор узлов с помощью заданного выражения XPath.

Select(XPathExpression)

Выбирает набор узлов с помощью заданного выражения XPathExpression.

Select(String, IXmlNamespaceResolver)

Выбирает набор узлов, используя указанное выражение XPath совместно с объектом IXmlNamespaceResolver для разрешения префиксов пространств имен.

Select(String)

Выбирает набор узлов с помощью заданного выражения XPath.

public virtual System.Xml.XPath.XPathNodeIterator Select (string xpath);

Параметры

xpath
String

Строка String, представляющая выражение XPath.

Возвращаемое значение

XPathNodeIterator

Объект XPathNodeIterator, указывающий на выбранный набор узлов.

Исключения

Выражение XPath содержит ошибку, или его возвращаемый тип не является набором узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере используется Select метод для выбора набора узлов.

XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

XPathNodeIterator nodes = navigator.Select("/bookstore/book");
nodes.MoveNext();
XPathNavigator nodesNavigator = nodes.Current;

XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false);

while (nodesText.MoveNext())
    Console.WriteLine(nodesText.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>  

Комментарии

Контекст выделения — это положение XPathNavigator при вызове этого метода. После вызова этого метода XPathNodeIterator возвращенный представляет набор выбранных узлов. Используйте MoveNext метод XPathNodeIterator итерации по выбранному набору узлов.

Следующий C# код выполняет итерацию по выбранному набору узлов.

XPathNodeIterator iterator = nav.Select("/bookstore/book");  
while (iterator.MoveNext())  
{  
    Console.WriteLine(Iterator.Current.Name);  
}  

Ниже приведены важные примечания, которые следует учитывать при использовании Select метода.

  • Для перемещения внутри объекта по-прежнему можно использовать любой из XPathNavigator методов навигации XPathNavigatorобъекта. Методы XPathNavigator навигации не зависят от выбранных узлов в XPathNodeIterator.

  • Будущие Select вызовы метода возвращают новый XPathNodeIterator объект, указывающий на выбранный набор узлов, соответствующий новому Select вызову. Два XPathNodeIterator объекта полностью независимы друг от друга.

  • Если для выражения XPath требуется разрешение пространства имен, используйте перегрузку Select , которая принимает XPathExpression его аргумент.

  • Этот метод не влияет на состояние XPathNavigatorобъекта .

См. также раздел

Применяется к

Select(XPathExpression)

Выбирает набор узлов с помощью заданного выражения XPathExpression.

public virtual System.Xml.XPath.XPathNodeIterator Select (System.Xml.XPath.XPathExpression expr);

Параметры

expr
XPathExpression

Объект XPathExpression, содержащий скомпилированный запрос XPath.

Возвращаемое значение

XPathNodeIterator

Объект XPathNodeIterator, указывающий на набор выбранных узлов.

Исключения

Выражение XPath содержит ошибку, или его возвращаемый тип не является набором узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере используется Select метод для выбора набора узлов.

XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

XPathExpression query = navigator.Compile("/bookstore/book");
XPathNodeIterator nodes = navigator.Select(query);
XPathNavigator nodesNavigator = nodes.Current;

XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false);

while (nodesText.MoveNext())
{
    Console.WriteLine(nodesText.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>  

Комментарии

Контекст выделения — это позиция XPathNavigator при вызове этого метода. После вызова этого метода XPathNodeIterator возвращенный представляет набор выбранных узлов. Используется MoveNext для XPathNodeIterator итерации по выбранному набору узлов.

Следующий C# код выполняет итерацию по выбранному набору узлов.

XPathNodeIterator ni = nav.Select(expr);  
while (ni.MoveNext())  
{  
    Console.WriteLine(ni.Current.Name);  
}  

Ниже приведены важные примечания, которые следует учитывать при использовании Select метода.

  • Для перемещения внутри объекта по-прежнему можно использовать любой из XPathNavigator методов навигации XPathNavigatorобъекта. Методы XPathNavigator навигации не зависят от выбранных узлов в XPathNodeIterator.

  • Будущие Select вызовы метода возвращают новый XPathNodeIterator объект, указывающий на выбранный набор узлов, соответствующий новому Select вызову. Два XPathNodeIterator объекта полностью независимы друг от друга.

  • Если требуется XPathExpression разрешение пространства имен, необходимо добавить XmlNamespaceManagerв нее префикс и пару URI пространства имен, а SetContext метод должен быть вызван, чтобы указать XmlNamespaceManager , что используется для разрешения пространства имен.

Например, предположим, что документ содержит следующие УЗЛЫ XML.

<bookstore xmlns:bk='urn:samples'>  
    <book bk:ISBN='1-325-0980'>  
        <title>Pride And Prejudice</title>  
    </book>  
</bookstore>  

В этом случае следующий C# код выбирает bk:ISBN узел.

XPathExpression expr = nav.Compile("book/@bk:ISBN");  
XmlNamespaceManager mngr = new XmlNamespaceManager(new NameTable());  
mngr.AddNamespace("bk","urn:samples");  
expr.SetContext(mngr);  
XPathNodeIterator ni = nav.Select(expr);  

Примечание

Если префикс XPathExpression не содержится, предполагается, что универсальный код ресурса (URI) пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо по-прежнему использовать SetContext метод и указать XmlNamespaceManager , что содержит префикс и универсальный код ресурса (URI) пространства имен для обработки пространства имен по умолчанию.

Например, предположим, что у вас есть следующий XML-код.

<bookstore xmlns="http://www.lucernepublishing.com">  
    <book>  
        <title>Pride And Prejudice</title>  
    </book>  
</bookstore>  

В этом случае следующий C# код выбирает все узлы книги:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");  
XPathExpression expr;  
expr = nav.Compile("//ab:book");  
expr.SetContext(nsmgr);  
XPathNodeIterator ni = nav.Select(expr);  

Этот метод не влияет на состояние XPathNavigatorобъекта .

См. также раздел

Применяется к

Select(String, IXmlNamespaceResolver)

Выбирает набор узлов, используя указанное выражение XPath совместно с объектом IXmlNamespaceResolver для разрешения префиксов пространств имен.

public virtual System.Xml.XPath.XPathNodeIterator Select (string xpath, System.Xml.IXmlNamespaceResolver? resolver);
public virtual System.Xml.XPath.XPathNodeIterator Select (string xpath, System.Xml.IXmlNamespaceResolver resolver);

Параметры

xpath
String

Строка String, представляющая выражение XPath.

resolver
IXmlNamespaceResolver

Объект IXmlNamespaceResolver, используемый для разрешения префиксов пространств имен.

Возвращаемое значение

XPathNodeIterator

Объект XPathNodeIterator, указывающий на набор выбранных узлов.

Исключения

Выражение XPath содержит ошибку, или его возвращаемый тип не является набором узлов.

Недопустимое выражение XPath.

Примеры

В следующем примере показано, как выбрать набор узлов с помощью Select метода с XmlNamespaceManager объектом, указанным для разрешения префиксов пространства имен в выражении XPath.

XPathDocument document = new XPathDocument("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("bk", "http://www.contoso.com/books");

XPathNodeIterator nodes = navigator.Select("/bk:bookstore/bk:book/bk:price", manager);
// Move to the first node bk:price node
if(nodes.MoveNext())
{
    // now nodes.Current points to the first selected node
    XPathNavigator nodesNavigator = nodes.Current;

    //select all the descendants of the current price node
    XPathNodeIterator nodesText =
       nodesNavigator.SelectDescendants(XPathNodeType.Text, false);

    while(nodesText.MoveNext())
    {
       Console.WriteLine(nodesText.Current.Value);
    }
}

В примере в качестве входных данных используется файл contosoBooks.xml.

<?xml version="1.0" encoding="utf-8" ?>  
<bookstore xmlns="http://www.contoso.com/books">  
    <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>  

Применяется к