Condividi tramite


XmlNode.SelectNodes Metodo

Definizione

Seleziona un elenco di nodi che corrispondono all'espressione XPath.

Overload

SelectNodes(String)

Seleziona un elenco di nodi che corrispondono all'espressione XPath.

SelectNodes(String, XmlNamespaceManager)

Seleziona un elenco di nodi che corrispondono all'espressione XPath. Qualsiasi prefisso trovato nell'espressione XPath viene risolto usando l'oggetto XmlNamespaceManager fornito.

Commenti

Le espressioni XPath possono includere spazi dei nomi. La risoluzione dello spazio dei nomi viene supportata usando il tipo XmlNamespaceManager. Se l'espressione XPath include un prefisso, è necessario aggiungere il prefisso e la coppia URI dello spazio dei nomi all'oggetto XmlNamespaceManager.

Nota

Se l'espressione XPath non include un prefisso, si presuppone che l'URI dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario aggiungere un prefisso e un URI dello spazio dei nomi all'oggetto XmlNamespaceManager. In caso contrario, non verranno selezionati nodi.

Per altre informazioni, vedere Selezionare nodi usando lo spostamento XPath. Per esempi di codice, scegliere un overload dall'elenco di overload nella sezione precedente.

SelectNodes(String)

Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs

Seleziona un elenco di nodi che corrispondono all'espressione 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

Parametri

xpath
String

Espressione XPath.

Restituisce

Oggetto XmlNodeList contenente una raccolta di nodi corrispondenti alla query XPath.

Eccezioni

Espressione XPath contenente un prefisso. Vedere Esempi XPath.

Esempio

Nell'esempio seguente vengono selezionati tutti i libri in cui il cognome dell'autore è Austen e quindi cambia il prezzo di tali libri.

#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

In questo esempio viene usato il codice XML seguente:


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

Commenti

Se l'espressione XPath richiede la risoluzione dello spazio dei nomi, è necessario usare l'overload SelectNodes che accetta XmlNamespaceManager come argomento. Viene XmlNamespaceManager usato per risolvere gli spazi dei nomi.

Nota

Se l'espressione XPath non include un prefisso, si presuppone che l'URI dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario usare e XmlNamespaceManager aggiungere un prefisso e un URI dello spazio dei nomi. In caso contrario, non verranno selezionati nodi. Per altre informazioni, vedere Selezionare nodi usando lo spostamento XPath.

Nota

Un problema comune quando si simulano espressioni XPath è come includere una singola virgolette (') o virgolette doppie (") nell'espressione. Se è necessario cercare un valore che include una singola citazione, è necessario racchiudere la stringa in virgolette doppie. Se è necessario cercare un valore che include una citazione doppia, è necessario racchiudere la stringa in virgolette singole.

Si supponga, ad esempio, di avere il codice XML seguente:

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

Il codice Visual Basic seguente seleziona un elemento contenente virgolette singole:

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

Questo metodo è un'estensione Microsoft per il modello a oggetti document (DOM).

L'oggetto XmlNodeList restituito da questo metodo sarà valido mentre il documento sottostante rimane invariato. Se il documento sottostante cambia, i risultati imprevisti potrebbero essere restituiti (nessuna eccezione verrà generata).

Vedi anche

Si applica a

SelectNodes(String, XmlNamespaceManager)

Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs

Seleziona un elenco di nodi che corrispondono all'espressione XPath. Qualsiasi prefisso trovato nell'espressione XPath viene risolto usando l'oggetto XmlNamespaceManager fornito.

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

Parametri

xpath
String

Espressione XPath. Vedere Esempi XPath.

nsmgr
XmlNamespaceManager

Oggetto XmlNamespaceManager da usare per risolvere gli spazi dei nomi per i prefissi nell'espressione XPath.

Restituisce

Oggetto XmlNodeList contenente una raccolta di nodi corrispondenti alla query XPath.

Eccezioni

Espressione XPath contenente un prefisso che non è definito nell'XmlNamespaceManager.

Esempio

Nell'esempio seguente vengono visualizzati i valori di ognuno degli attributi ISBN. In questo esempio viene usato un XmlElement oggetto che eredita dalla XmlNode classe .

#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

Nell'esempio viene usato il file, , booksort.xmlcome input.


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

Commenti

Le espressioni XPath possono includere spazi dei nomi. La risoluzione dello spazio dei nomi viene supportata usando il tipo XmlNamespaceManager. Se l'espressione XPath include un prefisso, è necessario aggiungere il prefisso e la coppia URI dello spazio dei nomi all'oggetto XmlNamespaceManager.

Nota

Se l'espressione XPath non include un prefisso, si presuppone che l'URI dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario aggiungere un prefisso e un URI dello spazio dei nomi all'oggetto XmlNamespaceManager. In caso contrario, non verranno selezionati nodi. Per altre informazioni, vedere Selezionare nodi usando lo spostamento XPath.

Ad esempio, se si dispone del codice XML seguente:

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

Il codice C# seguente seleziona tutti i nodi del libro:

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

Nota

Un problema comune quando si simulano espressioni XPath è come includere una singola virgolette (') o virgolette doppie (") nell'espressione. Se è necessario cercare un valore che include una singola citazione, è necessario racchiudere la stringa in virgolette doppie. Se è necessario cercare un valore che include una citazione doppia, è necessario racchiudere la stringa in virgolette singole.

Si supponga, ad esempio, di avere il codice XML seguente:

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

Il codice Visual Basic seguente seleziona un elemento contenente virgolette singole:

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)

Questo metodo è un'estensione Microsoft per il modello a oggetti document (DOM).

L'oggetto XmlNodeList restituito da questo metodo sarà valido mentre il documento sottostante rimane invariato. Se il documento sottostante cambia, i risultati imprevisti potrebbero essere restituiti (nessuna eccezione verrà generata).

Vedi anche

Si applica a