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


XmlNode.SelectNodes Метод

Определение

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

Перегрузки

SelectNodes(String)

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

SelectNodes(String, XmlNamespaceManager)

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

Комментарии

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

Примечание

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

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

SelectNodes(String)

Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs

Выбирает список узлов в соответствии с выражением 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, содержащий коллекцию узлов, соответствующих запросу 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)

Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs

Выбирает список узлов в соответствии с выражением 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, содержащий коллекцию узлов, соответствующих запросу 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 содержит префикс, необходимо добавить префикс и пару URI пространства имен в XmlNamespaceManager.

Примечание

Если выражение 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 , возвращаемый этим методом, будет действительным, а базовый документ остается неизменным. При изменении базового документа могут быть возвращены непредвиденные результаты (исключение не будет).

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

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