XmlNode.SelectNodes Methode

Definitie

Hiermee selecteert u een lijst met knooppunten die overeenkomen met de XPath-expressie.

Overloads

Name Description
SelectNodes(String)

Hiermee selecteert u een lijst met knooppunten die overeenkomen met de XPath-expressie.

SelectNodes(String, XmlNamespaceManager)

Hiermee selecteert u een lijst met knooppunten die overeenkomen met de XPath-expressie. Alle voorvoegsels in de XPath-expressie worden omgezet met behulp van de opgegeven XmlNamespaceManager.

Opmerkingen

XPath-expressies kunnen naamruimten bevatten. Naamruimteomzetting wordt ondersteund met behulp van de XmlNamespaceManager. Als de XPath-expressie een voorvoegsel bevat, moeten het voor- en naamruimte-URI-paar worden toegevoegd aan het XmlNamespaceManager.

Note

Als de XPath-expressie geen voorvoegsel bevat, wordt ervan uitgegaan dat de naamruimte-URI de lege naamruimte is. Als uw XML een standaardnaamruimte bevat, moet u nog steeds een voorvoegsel en naamruimte-URI toevoegen aan de XmlNamespaceManager. Anders worden er geen knooppunten geselecteerd.

Zie Knooppunten selecteren met behulp van XPath-navigatie voor meer informatie. Kies voor codevoorbeelden een overbelasting uit de lijst met overbelastingen in de vorige sectie.

SelectNodes(String)

Hiermee selecteert u een lijst met knooppunten die overeenkomen met de XPath-expressie.

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

Parameters

xpath
String

De XPath-expressie.

Retouren

Een XmlNodeList met een verzameling knooppunten die overeenkomen met de XPath-query.

Uitzonderingen

De XPath-expressie bevat een voorvoegsel. Zie XPath-voorbeelden.

Voorbeelden

In het volgende voorbeeld worden alle boeken geselecteerd waarin de achternaam van de auteur Austen is en wordt de prijs van die boeken gewijzigd.

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 dit voorbeeld wordt de volgende XML gebruikt:


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

Opmerkingen

Als voor de XPath-expressie naamruimteomzetting is vereist, moet u de SelectNodes overbelasting gebruiken die een XmlNamespaceManager als argument gebruikt. De XmlNamespaceManager naamruimten worden gebruikt om naamruimten op te lossen.

Note

Als de XPath-expressie geen voorvoegsel bevat, wordt ervan uitgegaan dat de naamruimte-URI de lege naamruimte is. Als uw XML een standaardnaamruimte bevat, moet u nog steeds het XmlNamespaceManager voorvoegsel en de naamruimte-URI eraan toevoegen. Anders worden er geen knooppunten geselecteerd. Zie Knooppunten selecteren met behulp van XPath-navigatie voor meer informatie.

Note

Een veelvoorkomend probleem bij het formuleren van XPath-expressies is het opnemen van één aanhalingsteken (') of dubbele aanhalingsteken (") in de expressie. Als u moet zoeken naar een waarde die één aanhalingsteken bevat, moet u de tekenreeks tussen dubbele aanhalingstekens plaatsen. Als u wilt zoeken naar een waarde die een dubbele aanhalingsteken bevat, moet u de tekenreeks tussen enkele aanhalingstekens plaatsen.

Stel dat u de volgende XML hebt:

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

Met de volgende Visual Basic code wordt een element geselecteerd dat enkele aanhalingstekens bevat:

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

Deze methode is een Microsoft extensie voor het Document Object Model (DOM).

Het XmlNodeList object dat door deze methode wordt geretourneerd, is geldig terwijl het onderliggende document ongewijzigd blijft. Als de onderliggende documentwijzigingen worden gewijzigd, kunnen onverwachte resultaten worden geretourneerd (er wordt geen uitzondering gegenereerd).

Zie ook

Van toepassing op

SelectNodes(String, XmlNamespaceManager)

Hiermee selecteert u een lijst met knooppunten die overeenkomen met de XPath-expressie. Alle voorvoegsels in de XPath-expressie worden omgezet met behulp van de opgegeven XmlNamespaceManager.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::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

Parameters

xpath
String

De XPath-expressie. Zie XPath-voorbeelden.

nsmgr
XmlNamespaceManager

Een XmlNamespaceManager te gebruiken voor het omzetten van naamruimten voor voorvoegsels in de XPath-expressie.

Retouren

Een XmlNodeList met een verzameling knooppunten die overeenkomen met de XPath-query.

Uitzonderingen

De XPath-expressie bevat een voorvoegsel dat niet is gedefinieerd in de XmlNamespaceManager.

Voorbeelden

In het volgende voorbeeld worden de waarden van elk van de ISBN-kenmerken weergegeven. In dit voorbeeld wordt een XmlElement object gebruikt dat wordt overgenomen van de XmlNode klasse.

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

In het voorbeeld wordt het bestand als booksort.xmlinvoer gebruikt.


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

Opmerkingen

XPath-expressies kunnen naamruimten bevatten. Naamruimteomzetting wordt ondersteund met behulp van de XmlNamespaceManager. Als de XPath-expressie een voorvoegsel bevat, moeten het voor- en naamruimte-URI-paar worden toegevoegd aan het XmlNamespaceManager.

Note

Als de XPath-expressie geen voorvoegsel bevat, wordt ervan uitgegaan dat de naamruimte-URI de lege naamruimte is. Als uw XML een standaardnaamruimte bevat, moet u nog steeds een voorvoegsel en naamruimte-URI toevoegen aan de XmlNamespaceManager. Anders worden er geen knooppunten geselecteerd. Zie Knooppunten selecteren met behulp van XPath-navigatie voor meer informatie.

Als u bijvoorbeeld de volgende XML hebt:

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

De volgende C#-code selecteert alle boekknooppunten:

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

Note

Een veelvoorkomend probleem bij het formuleren van XPath-expressies is het opnemen van één aanhalingsteken (') of dubbele aanhalingsteken (") in de expressie. Als u moet zoeken naar een waarde die één aanhalingsteken bevat, moet u de tekenreeks tussen dubbele aanhalingstekens plaatsen. Als u wilt zoeken naar een waarde die een dubbele aanhalingsteken bevat, moet u de tekenreeks tussen enkele aanhalingstekens plaatsen.

Stel dat u de volgende XML hebt:

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

Met de volgende Visual Basic code wordt een element geselecteerd dat enkele aanhalingstekens bevat:

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)

Deze methode is een Microsoft extensie voor het Document Object Model (DOM).

Het XmlNodeList object dat door deze methode wordt geretourneerd, is geldig terwijl het onderliggende document ongewijzigd blijft. Als de onderliggende documentwijzigingen worden gewijzigd, kunnen onverwachte resultaten worden geretourneerd (er wordt geen uitzondering gegenereerd).

Zie ook

Van toepassing op