Бөлісу құралы:


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)

Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
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 содержит префикс.

Примеры

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

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
Исходный код:
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.

nsmgr
XmlNamespaceManager

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

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

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

Исключения

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

Примеры

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

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

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

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