XmlNode.SelectSingleNode 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.
Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie.
Overloads
| Name | Description |
|---|---|
| SelectSingleNode(String) |
Selecteert de eerste |
| SelectSingleNode(String, XmlNamespaceManager) |
Selecteert de eerste |
Voorbeelden
In het volgende voorbeeld wordt het eerste boek geretourneerd met de overeenkomende naam van de auteur. Hiermee XmlNamespaceManager wordt de standaardnaamruimte in de XPath-expressie omgezet.
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("newbooks.xml");
// Create an XmlNamespaceManager to resolve the default namespace.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bk", "urn:newbooks-schema");
// Select the first book written by an author whose last name is Atwood.
XmlNode book;
XmlElement root = doc.DocumentElement;
book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr);
Console.WriteLine(book.OuterXml);
}
}
Imports System.IO
Imports System.Xml
Public Class Sample
Public Shared Sub Main()
Dim doc As XmlDocument = New XmlDocument()
doc.Load("newbooks.xml")
'Create an XmlNamespaceManager for resolving namespaces.
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("bk", "urn:newbooks-schema")
'Select the book written by an author whose last name is Atwood.
Dim book As XmlNode
Dim root As XmlElement = doc.DocumentElement
book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr)
Console.WriteLine(book.OuterXml)
End Sub
End Class
In het voorbeeld wordt het bestand als newbooks.xmlinvoer gebruikt.
<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
<book genre="novel" style="hardcover">
<title>The Handmaid's Tale</title>
<author>
<first-name>Margaret</first-name>
<last-name>Atwood</last-name>
</author>
<price>19.95</price>
</book>
<book genre="novel" style="other">
<title>The Poisonwood Bible</title>
<author>
<first-name>Barbara</first-name>
<last-name>Kingsolver</last-name>
</author>
<price>11.99</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.
SelectSingleNode(String)
Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie.
public:
System::Xml::XmlNode ^ SelectSingleNode(System::String ^ xpath);
public System.Xml.XmlNode SelectSingleNode(string xpath);
member this.SelectSingleNode : string -> System.Xml.XmlNode
Public Function SelectSingleNode (xpath As String) As XmlNode
Parameters
- xpath
- String
De XPath-expressie. Zie XPath-voorbeelden.
Retouren
De eerste XmlNode die overeenkomt met de XPath-query of null als er geen overeenkomend knooppunt wordt gevonden.
Uitzonderingen
De XPath-expressie bevat een voorvoegsel.
Voorbeelden
In het volgende voorbeeld wordt de prijs van het eerste Jane Austen-boek gewijzigd.
using System;
using System.IO;
using System.Xml;
public class Sample {
public static void Main() {
XmlDocument doc = new XmlDocument();
doc.Load("booksort.xml");
XmlNode book;
XmlNode root = doc.DocumentElement;
book=root.SelectSingleNode("descendant::book[author/last-name='Austen']");
//Change the price on the book.
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 root as XmlNode = doc.DocumentElement
book=root.SelectSingleNode("descendant::book[author/last-name='Austen']")
'Change the price on the book.
book.LastChild.InnerText="15.95"
Console.WriteLine("Display the modified XML document....")
doc.Save(Console.Out)
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
Als voor de XPath-expressie naamruimteomzetting is vereist, moet u de SelectSingleNode 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 krijgt u geen geselecteerd knooppunt. 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:
book = root.SelectSingleNode("descendant::book[title=""'Emma'""]")
Deze methode is een Microsoft extensie voor het Document Object Model (DOM).
Zie ook
Van toepassing op
SelectSingleNode(String, XmlNamespaceManager)
Selecteert de eerste XmlNode die overeenkomt met de XPath-expressie. Alle voorvoegsels in de XPath-expressie worden omgezet met behulp van de opgegeven XmlNamespaceManager.
public:
System::Xml::XmlNode ^ SelectSingleNode(System::String ^ xpath, System::Xml::XmlNamespaceManager ^ nsmgr);
public System.Xml.XmlNode SelectSingleNode(string xpath, System.Xml.XmlNamespaceManager nsmgr);
member this.SelectSingleNode : string * System.Xml.XmlNamespaceManager -> System.Xml.XmlNode
Public Function SelectSingleNode (xpath As String, nsmgr As XmlNamespaceManager) As XmlNode
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
De eerste XmlNode die overeenkomt met de XPath-query of null als er geen overeenkomend knooppunt wordt gevonden.
Uitzonderingen
De XPath-expressie bevat een voorvoegsel dat niet is gedefinieerd in de XmlNamespaceManager.
Voorbeelden
In het volgende voorbeeld wordt het boek geselecteerd met de overeenkomende ISBN-waarde.
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 the book node with the matching attribute value.
XmlNode book;
XmlElement root = doc.DocumentElement;
book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr);
Console.WriteLine(book.OuterXml);
}
}
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 the book node with the matching attribute value.
Dim book as XmlNode
Dim root as XmlElement = doc.DocumentElement
book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr)
Console.WriteLine(book.OuterXml)
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 krijgt u geen knooppunt 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>
Met de volgende C#-code wordt het eerste boekknooppunt geselecteerd:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XmlNode book = doc.SelectSingleNode("//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")
book = root.SelectSingleNode("descendant::ab:book[ab:title=""'Emma'""]", nsmgr)
Deze methode is een Microsoft extensie voor het Document Object Model (DOM).