XmlNode.SelectNodes Метод

Определение

Выбирает список узлов в соответствии с выражением XPath.

Перегрузки

SelectNodes(String)

Выбирает список узлов в соответствии с выражением XPath.

SelectNodes(String, XmlNamespaceManager)

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

Комментарии

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

Примечание

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

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

SelectNodes(String)

Выбирает список узлов в соответствии с выражением XPath.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::String ^ xpath);
public System.Xml.XmlNodeList? SelectNodes (string xpath);
public System.Xml.XmlNodeList SelectNodes (string xpath);
member this.SelectNodes : string -> System.Xml.XmlNodeList
Public Function SelectNodes (xpath As String) As XmlNodeList

Параметры

xpath
String

Выражение XPath.

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

XmlNodeList

XmlNodeList, содержащий коллекцию узлов, соответствующих запросу XPath.

Исключения

Выражение XPath, содержащее префикс. См. раздел Примеры XPath.

Примеры

В следующем примере выбираются все книги, в которых фамилия автора — Austen, а затем изменяется цена этих книг.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "booksort.xml" );
   XmlNodeList^ nodeList;
   XmlNode^ root = doc->DocumentElement;
   nodeList = root->SelectNodes( "descendant::book[author/last-name='Austen']" );
   
   //Change the price on the books.
   System::Collections::IEnumerator^ myEnum = nodeList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      XmlNode^ book = safe_cast<XmlNode^>(myEnum->Current);
      book->LastChild->InnerText = "15.95";
   }

   Console::WriteLine( "Display the modified XML document...." );
   doc->Save( Console::Out );
}
using System;
using System.Xml;

public class Sample6
{
    public static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("booksort.xml");

        XmlNodeList nodeList;
        XmlNode root = doc.DocumentElement;

        nodeList = root.SelectNodes("descendant::book[author/last-name='Austen']");

        //Change the price on the books.
        foreach (XmlNode book in nodeList)
        {
            book.LastChild.InnerText = "15.95";
        }

        Console.WriteLine("Display the modified XML document....");
        doc.Save(Console.Out);
    }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    'Create the XmlDocument.
    Dim doc as XmlDocument = new XmlDocument()
    doc.Load("booksort.xml")
           
    Dim book as XmlNode
    Dim nodeList as XmlNodeList 
    Dim root as XmlNode = doc.DocumentElement

    nodeList=root.SelectNodes("descendant::book[author/last-name='Austen']")
 
    'Change the price on the books.
    for each book in nodeList      
      book.LastChild.InnerText="15.95"
    next 

    Console.WriteLine("Display the modified XML document....")
    doc.Save(Console.Out)
    
  end sub
end class

В этом примере используется следующий XML-код:


<?xml version="1.0"?>
<!-- A fragment of a book store inventory database -->
<bookstore xmlns:bk="urn:samples">
  <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
    <title>Pride And Prejudice</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>24.95</price>
  </book>
  <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>29.95</price>
  </book>
  <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
    <title>Emma</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
    <title>Sense and Sensibility</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
</bookstore>

Комментарии

Если для выражения XPath требуется разрешение пространства имен, необходимо использовать перегрузку SelectNodes , которая принимает его в качестве аргумента XmlNamespaceManager . Используется XmlNamespaceManager для разрешения пространств имен.

Примечание

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

Примечание

Распространенная проблема при составлении выражений XPath заключается в том, как включить в выражение одинарный кавычки (') или двойные кавычки ("). Если необходимо искать значение, включающее одинарный кавычки, необходимо заключить строку в двойные кавычки. Если необходимо выполнить поиск значения, включающего двойную кавычку, необходимо заключить строку в одинарные кавычки.

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

<bookstore>  
  <book>  
    <title>&apos;Emma&apos;</title>  
  </book>  
</bookstore>  

Следующий Visual Basic код выбирает элемент, содержащий одинарные кавычки:

nodeList = root.SelectNodes("//book[contains(title,""'Emma'"")]")  

Этот метод является расширением Майкрософт для модели объектов документов (DOM).

Объект, XmlNodeList возвращаемый этим методом, будет допустимым, пока базовый документ остается неизменным. При изменении базового документа могут быть возвращены непредвиденные результаты (исключение не будет создано).

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

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

SelectNodes(String, XmlNamespaceManager)

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

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::String ^ xpath, System::Xml::XmlNamespaceManager ^ nsmgr);
public System.Xml.XmlNodeList? SelectNodes (string xpath, System.Xml.XmlNamespaceManager nsmgr);
public System.Xml.XmlNodeList SelectNodes (string xpath, System.Xml.XmlNamespaceManager nsmgr);
member this.SelectNodes : string * System.Xml.XmlNamespaceManager -> System.Xml.XmlNodeList
Public Function SelectNodes (xpath As String, nsmgr As XmlNamespaceManager) As XmlNodeList

Параметры

xpath
String

Выражение XPath. См. раздел Примеры XPath.

nsmgr
XmlNamespaceManager

XmlNamespaceManager служит для разрешения пространств имен для префиксов в выражении XPath.

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

XmlNodeList

XmlNodeList, содержащий коллекцию узлов, соответствующих запросу XPath.

Исключения

Выражение XPath содержит префикс, который не определен в XmlNamespaceManager.

Примеры

В следующем примере показаны значения каждого атрибута ISBN. В этом примере используется XmlElement объект, наследуемый от XmlNode класса.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Collections;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "booksort.xml" );
   
   // Create an XmlNamespaceManager for resolving namespaces.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( "bk", "urn:samples" );
   
   // Select and display the value of all the ISBN attributes.
   XmlNodeList^ nodeList;
   XmlElement^ root = doc->DocumentElement;
   nodeList = root->SelectNodes( "/bookstore/book/@bk:ISBN", nsmgr );
   IEnumerator^ myEnum = nodeList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      XmlNode^ isbn = safe_cast<XmlNode^>(myEnum->Current);
      Console::WriteLine( isbn->Value );
   }
}
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {

      XmlDocument doc = new XmlDocument();
      doc.Load("booksort.xml");

      //Create an XmlNamespaceManager for resolving namespaces.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
      nsmgr.AddNamespace("bk", "urn:samples");

      //Select and display the value of all the ISBN attributes.
      XmlNodeList nodeList;
      XmlElement root = doc.DocumentElement;
      nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr);
      foreach (XmlNode isbn in nodeList){
        Console.WriteLine(isbn.Value);
      }
   }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

      Dim doc as XmlDocument = new XmlDocument()
      doc.Load("booksort.xml")

      'Create an XmlNamespaceManager for resolving namespaces.
      Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(doc.NameTable)
      nsmgr.AddNamespace("bk", "urn:samples")

      'Select and display the value of all the ISBN attributes.
      Dim nodeList as XmlNodeList 
      Dim root as XmlElement = doc.DocumentElement
      nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr)
      Dim isbn as XmlNode
      for each isbn in nodeList
        Console.WriteLine(isbn.Value)
      next

  end sub
end class

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


<?xml version="1.0"?>
<!-- A fragment of a book store inventory database -->
<bookstore xmlns:bk="urn:samples">
  <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
    <title>Pride And Prejudice</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>24.95</price>
  </book>
  <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>29.95</price>
  </book>
  <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
    <title>Emma</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
    <title>Sense and Sensibility</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
</bookstore>

Комментарии

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

Примечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо добавить в него префикс и универсальный код ресурса (URI XmlNamespaceManager) пространства имен; в противном случае вы не получите выбранные узлы. Дополнительные сведения см. в разделе "Выбор узлов с помощью XPath Navigation".

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

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

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

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");  
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);  

Примечание

Распространенная проблема при составлении выражений XPath заключается в том, как включить в выражение одинарный кавычки (') или двойные кавычки ("). Если необходимо искать значение, включающее одинарный кавычки, необходимо заключить строку в двойные кавычки. Если необходимо выполнить поиск значения, включающего двойную кавычку, необходимо заключить строку в одинарные кавычки.

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

<bookstore xmlns="http://www.lucernepublishing.com">  
  <book>  
    <title>&apos;Emma&apos;</title>  
  </book>  
</bookstore>  

Следующий Visual Basic код выбирает элемент, содержащий одинарные кавычки:

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com")  
nodeList = root.SelectNodes("//ab:book[contains(ab:title,""'Emma'"")]", nsmgr)  

Этот метод является расширением Майкрософт для модели объектов документов (DOM).

Объект, XmlNodeList возвращаемый этим методом, будет допустимым, пока базовый документ остается неизменным. При изменении базового документа могут быть возвращены непредвиденные результаты (исключение не будет создано).

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

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