XmlNode.SelectNodes Metoda

Definicja

Wybiera listę węzłów pasujących do wyrażenia XPath.

Przeciążenia

SelectNodes(String)

Wybiera listę węzłów pasujących do wyrażenia XPath.

SelectNodes(String, XmlNamespaceManager)

Wybiera listę węzłów pasujących do wyrażenia XPath. Wszystkie prefiksy znalezione w wyrażeniu XPath są rozpoznawane przy użyciu podanego XmlNamespaceManagerelementu .

Uwagi

Wyrażenia XPath mogą zawierać przestrzenie nazw. Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu elementu XmlNamespaceManager. Jeśli wyrażenie XPath zawiera prefiks, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManagerklasy .

Uwaga

Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz dodać prefiks i identyfikator URI przestrzeni nazw do XmlNamespaceManagerobiektu . W przeciwnym razie nie zostaną wybrane żadne węzły.

Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath. W przypadku przykładów kodu wybierz przeciążenie z listy przeciążeń w poprzedniej sekcji.

SelectNodes(String)

Wybiera listę węzłów pasujących do wyrażenia 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

Parametry

xpath
String

Wyrażenie XPath.

Zwraca

XmlNodeList

Element XmlNodeList zawierający kolekcję węzłów pasujących do zapytania XPath.

Wyjątki

Wyrażenie XPath zawiera prefiks. Zobacz Przykłady XPath.

Przykłady

Poniższy przykład wybiera wszystkie książki, w których nazwisko autora to Austen, a następnie zmienia cenę tych książek.

#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

W tym przykładzie użyto następującego kodu 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>

Uwagi

Jeśli wyrażenie XPath wymaga rozpoznawania przestrzeni nazw, należy użyć SelectNodes przeciążenia, które przyjmuje XmlNamespaceManager jako argument. Służy do rozpoznawania XmlNamespaceManager przestrzeni nazw.

Uwaga

Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz użyć XmlNamespaceManager i dodać do niego prefiks i identyfikator URI przestrzeni nazw. W przeciwnym razie nie zostaną wybrane żadne węzły. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.

Uwaga

Typowym problemem podczas formułowania wyrażeń XPath jest sposób uwzględnienia pojedynczego cudzysłowu (') lub podwójnego cudzysłowu (") w wyrażeniu. Jeśli musisz wyszukać wartość zawierającą pojedynczy cudzysłów, musisz ująć ciąg w cudzysłowy. Jeśli musisz wyszukać wartość zawierającą podwójny cudzysłów, musisz ująć ciąg w cudzysłów pojedynczych.

Załóżmy na przykład, że masz następujący kod XML:

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

Poniższy kod Visual Basic wybiera element zawierający pojedyncze cudzysłowy:

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

Ta metoda jest rozszerzeniem firmy Microsoft do modelu obiektów dokumentów (DOM).

XmlNodeList Obiekt zwrócony przez tę metodę będzie prawidłowy, gdy podstawowy dokument pozostanie niezmieniony. Jeśli podstawowy dokument ulegnie zmianie, mogą zostać zwrócone nieoczekiwane wyniki (nie zostanie zgłoszony wyjątek).

Zobacz też

Dotyczy

SelectNodes(String, XmlNamespaceManager)

Wybiera listę węzłów pasujących do wyrażenia XPath. Wszystkie prefiksy znalezione w wyrażeniu XPath są rozpoznawane przy użyciu podanego XmlNamespaceManagerelementu .

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

Parametry

xpath
String

Wyrażenie XPath. Zobacz Przykłady XPath.

nsmgr
XmlNamespaceManager

Element XmlNamespaceManager służący do rozpoznawania przestrzeni nazw dla prefiksów w wyrażeniu XPath.

Zwraca

XmlNodeList

Element XmlNodeList zawierający kolekcję węzłów pasujących do zapytania XPath.

Wyjątki

Wyrażenie XPath zawiera prefiks, który nie jest zdefiniowany w elemecie XmlNamespaceManager.

Przykłady

W poniższym przykładzie przedstawiono wartości poszczególnych atrybutów ISBN. W tym przykładzie użyto XmlElement obiektu dziedziczonego XmlNode z klasy.

#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

W przykładzie użyto pliku , booksort.xmljako danych wejściowych.


<?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>

Uwagi

Wyrażenia XPath mogą zawierać przestrzenie nazw. Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu elementu XmlNamespaceManager. Jeśli wyrażenie XPath zawiera prefiks, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManagerklasy .

Uwaga

Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz dodać prefiks i identyfikator URI przestrzeni nazw do XmlNamespaceManagerobiektu . W przeciwnym razie nie zostaną wybrane żadne węzły. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.

Jeśli na przykład masz następujący kod XML:

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

Poniższy kod w języku C# wybiera wszystkie węzły książki:

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

Uwaga

Typowym problemem podczas formułowania wyrażeń XPath jest sposób uwzględnienia pojedynczego cudzysłowu (') lub podwójnego cudzysłowu (") w wyrażeniu. Jeśli musisz wyszukać wartość zawierającą pojedynczy cudzysłów, musisz ująć ciąg w cudzysłowy. Jeśli musisz wyszukać wartość zawierającą podwójny cudzysłów, musisz ująć ciąg w cudzysłów pojedynczych.

Załóżmy na przykład, że masz następujący kod XML:

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

Poniższy kod Visual Basic wybiera element zawierający pojedyncze cudzysłowy:

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)  

Ta metoda jest rozszerzeniem firmy Microsoft do modelu obiektów dokumentów (DOM).

XmlNodeList Obiekt zwrócony przez tę metodę będzie prawidłowy, gdy podstawowy dokument pozostanie niezmieniony. Jeśli podstawowy dokument ulegnie zmianie, mogą zostać zwrócone nieoczekiwane wyniki (nie zostanie zgłoszony wyjątek).

Zobacz też

Dotyczy