XmlNode.SelectNodes Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vybere seznam uzlů odpovídající výrazu XPath.
Přetížení
SelectNodes(String) |
Vybere seznam uzlů odpovídající výrazu XPath. |
SelectNodes(String, XmlNamespaceManager) |
Vybere seznam uzlů odpovídající výrazu XPath. Všechny předpony nalezené ve výrazu XPath se přeloží pomocí zadaného XmlNamespaceManagervýrazu . |
Poznámky
Výrazy XPath můžou zahrnovat obory názvů. Překlad oboru názvů se podporuje pomocí rozhraní XmlNamespaceManager
. Pokud výraz XPath obsahuje předponu, musí být do souboru přidán XmlNamespaceManager
pár identifikátorů URI předpony a oboru názvů .
Poznámka
Pokud výraz XPath neobsahuje předponu, předpokládá se, že identifikátor URI oboru názvů je prázdný obor názvů. Pokud xml obsahuje výchozí obor názvů, musíte stále přidat předponu a identifikátor URI oboru názvů do objektu XmlNamespaceManager
; v opačném případě nebudete mít vybrané žádné uzly.
Další informace naleznete v tématu Výběr uzlů pomocí navigace XPath. V příkladech kódu zvolte přetížení ze seznamu přetížení v předchozí části.
SelectNodes(String)
Vybere seznam uzlů odpovídající výrazu 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
Výraz XPath.
Návraty
Obsahuje XmlNodeList kolekci uzlů odpovídající dotazu XPath.
Výjimky
Výraz XPath obsahuje předponu. Viz příklady XPath.
Příklady
Následující příklad vybere všechny knihy, ve kterých je příjmení autora Austen, a pak změní cenu těchto knih.
#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
V tomto příkladu se používá následující 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>
Poznámky
Pokud výraz XPath vyžaduje rozlišení oboru názvů, musíte použít SelectNodes
přetížení, které přebírá XmlNamespaceManager jako argument. Používá XmlNamespaceManager
se k překladu oborů názvů.
Poznámka
Pokud výraz XPath neobsahuje předponu, předpokládá se, že identifikátor URI oboru názvů je prázdný obor názvů. Pokud xml obsahuje výchozí obor názvů, musíte k němu stále použít předponu XmlNamespaceManager
a identifikátor URI oboru názvů. V opačném případě nebudete mít vybrané žádné uzly. Další informace naleznete v tématu Výběr uzlů pomocí navigace XPath.
Poznámka
Běžným problémem při formulaci výrazů XPath je způsob, jak do výrazu zahrnout jednoduchou uvozovku (') nebo dvojitou uvozovku ("). Pokud potřebujete vyhledat hodnotu, která obsahuje jednu uvozovku, musíte řetězec uzavřít do dvojitých uvozovek. Pokud potřebujete vyhledat hodnotu, která obsahuje dvojitou uvozovku, musíte řetězec uzavřít do jednoduchých uvozovek.
Předpokládejme například, že máte následující KÓD XML:
<bookstore>
<book>
<title>'Emma'</title>
</book>
</bookstore>
Následující Visual Basic kód vybere prvek, který obsahuje jednoduché uvozovky:
nodeList = root.SelectNodes("//book[contains(title,""'Emma'"")]")
Tato metoda je rozšířením Microsoftu na model DOM (Document Object Model).
Objekt XmlNodeList vrácený touto metodou bude platný, zatímco podkladový dokument zůstane beze změny. Pokud se podkladový dokument změní, mohou být vráceny neočekávané výsledky (vyvolá se žádná výjimka).
Viz také
Platí pro
SelectNodes(String, XmlNamespaceManager)
Vybere seznam uzlů odpovídající výrazu XPath. Všechny předpony nalezené ve výrazu XPath se přeloží pomocí zadaného XmlNamespaceManagervýrazu .
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
Výraz XPath. Viz příklady XPath.
- nsmgr
- XmlNamespaceManager
Slouží XmlNamespaceManager k překladu oborů názvů pro předpony ve výrazu XPath.
Návraty
Obsahuje XmlNodeList kolekci uzlů odpovídající dotazu XPath.
Výjimky
Výraz XPath obsahuje předponu, která není definována v .XmlNamespaceManager
Příklady
Následující příklad zobrazí hodnoty jednotlivých atributů ISBN. Tento příklad používá XmlElement objekt, který dědí z XmlNode třídy.
#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
Příklad používá soubor , booksort.xml
jako vstup.
<?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>
Poznámky
Výrazy XPath můžou zahrnovat obory názvů. Překlad oboru názvů se podporuje pomocí rozhraní XmlNamespaceManager
. Pokud výraz XPath obsahuje předponu, musí být do souboru přidán XmlNamespaceManager
pár identifikátorů URI předpony a oboru názvů .
Poznámka
Pokud výraz XPath neobsahuje předponu, předpokládá se, že identifikátor URI oboru názvů je prázdný obor názvů. Pokud xml obsahuje výchozí obor názvů, musíte stále přidat předponu a identifikátor URI oboru názvů do objektu XmlNamespaceManager
; v opačném případě nebudete mít vybrané žádné uzly. Další informace naleznete v tématu Výběr uzlů pomocí navigace XPath.
Pokud jste například měli následující kód XML:
<bookstore xmlns="http://www.lucernepublishing.com">
<book>
<title>Pride And Prejudice</title>
</book>
</bookstore>
Následující kód jazyka C# vybere všechny uzly knihy:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);
Poznámka
Běžným problémem při formulaci výrazů XPath je způsob, jak do výrazu zahrnout jednoduchou uvozovku (') nebo dvojitou uvozovku ("). Pokud potřebujete vyhledat hodnotu, která obsahuje jednu uvozovku, musíte řetězec uzavřít do dvojitých uvozovek. Pokud potřebujete vyhledat hodnotu, která obsahuje dvojitou uvozovku, musíte řetězec uzavřít do jednoduchých uvozovek.
Předpokládejme například, že máte následující KÓD XML:
<bookstore xmlns="http://www.lucernepublishing.com">
<book>
<title>'Emma'</title>
</book>
</bookstore>
Následující Visual Basic kód vybere prvek, který obsahuje jednoduché uvozovky:
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)
Tato metoda je rozšířením Microsoftu na model DOM (Document Object Model).
Objekt XmlNodeList vrácený touto metodou bude platný, zatímco podkladový dokument zůstane beze změny. Pokud se podkladový dokument změní, mohou být vráceny neočekávané výsledky (vyvolá se žádná výjimka).