XmlNode.SelectNodes Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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>'Emma'</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>'Emma'</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).