XmlNode.SelectNodes Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wybiera listę węzłów pasujących do wyrażenia XPath.
Przeciążenia
SelectNodes(String) |
Wybiera listę węzłów pasujących do wyrażenia XPath. |
SelectNodes(String, XmlNamespaceManager) |
Wybiera listę węzłów pasujących do wyrażenia XPath. Wszystkie prefiksy znalezione w wyrażeniu XPath są rozpoznawane przy użyciu podanego XmlNamespaceManagerelementu . |
Uwagi
Wyrażenia XPath mogą zawierać przestrzenie nazw. Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu elementu XmlNamespaceManager
. Jeśli wyrażenie XPath zawiera prefiks, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManager
klasy .
Uwaga
Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz dodać prefiks i identyfikator URI przestrzeni nazw do XmlNamespaceManager
obiektu . W przeciwnym razie nie zostaną wybrane żadne węzły.
Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath. W przypadku przykładów kodu wybierz przeciążenie z listy przeciążeń w poprzedniej sekcji.
SelectNodes(String)
- Źródło:
- XmlNode.cs
- Źródło:
- XmlNode.cs
- Źródło:
- XmlNode.cs
Wybiera listę węzłów pasujących do wyrażenia 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
Wyrażenie XPath.
Zwraca
Element XmlNodeList zawierający kolekcję węzłów pasujących do zapytania XPath.
Wyjątki
Wyrażenie XPath zawiera prefiks. Zobacz Przykłady XPath.
Przykłady
Poniższy przykład wybiera wszystkie książki, w których nazwisko autora to Austen, a następnie zmienia cenę tych książek.
#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
W tym przykładzie użyto następującego kodu 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>
Uwagi
Jeśli wyrażenie XPath wymaga rozpoznawania przestrzeni nazw, należy użyć SelectNodes
przeciążenia, które przyjmuje XmlNamespaceManager jako argument. Służy do rozpoznawania XmlNamespaceManager
przestrzeni nazw.
Uwaga
Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz użyć XmlNamespaceManager
i dodać do niego prefiks i identyfikator URI przestrzeni nazw. W przeciwnym razie nie zostaną wybrane żadne węzły. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.
Uwaga
Typowym problemem podczas formułowania wyrażeń XPath jest sposób uwzględnienia pojedynczego cudzysłowu (') lub podwójnego cudzysłowu (") w wyrażeniu. Jeśli musisz wyszukać wartość zawierającą pojedynczy cudzysłów, musisz ująć ciąg w cudzysłowy. Jeśli musisz wyszukać wartość zawierającą podwójny cudzysłów, musisz ująć ciąg w cudzysłów pojedynczych.
Załóżmy na przykład, że masz następujący kod XML:
<bookstore>
<book>
<title>'Emma'</title>
</book>
</bookstore>
Poniższy kod języka Visual Basic wybiera element zawierający pojedyncze cudzysłowy:
nodeList = root.SelectNodes("//book[contains(title,""'Emma'"")]")
Ta metoda jest rozszerzeniem firmy Microsoft do modelu obiektów dokumentów (DOM).
XmlNodeList Obiekt zwrócony przez tę metodę będzie prawidłowy, gdy podstawowy dokument pozostanie niezmieniony. Jeśli podstawowy dokument ulegnie zmianie, mogą zostać zwrócone nieoczekiwane wyniki (nie zostanie zgłoszony wyjątek).
Zobacz też
Dotyczy
SelectNodes(String, XmlNamespaceManager)
- Źródło:
- XmlNode.cs
- Źródło:
- XmlNode.cs
- Źródło:
- XmlNode.cs
Wybiera listę węzłów pasujących do wyrażenia XPath. Wszystkie prefiksy znalezione w wyrażeniu XPath są rozpoznawane przy użyciu podanego XmlNamespaceManagerelementu .
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
Wyrażenie XPath. Zobacz Przykłady XPath.
- nsmgr
- XmlNamespaceManager
Element XmlNamespaceManager służący do rozpoznawania przestrzeni nazw dla prefiksów w wyrażeniu XPath.
Zwraca
Element XmlNodeList zawierający kolekcję węzłów pasujących do zapytania XPath.
Wyjątki
Wyrażenie XPath zawiera prefiks, który nie jest zdefiniowany w elemecie XmlNamespaceManager
.
Przykłady
W poniższym przykładzie przedstawiono wartości poszczególnych atrybutów ISBN. W tym przykładzie użyto XmlElement obiektu dziedziczonego XmlNode z klasy.
#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
W przykładzie użyto pliku , booksort.xml
jako danych wejściowych.
<?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>
Uwagi
Wyrażenia XPath mogą zawierać przestrzenie nazw. Rozpoznawanie przestrzeni nazw jest obsługiwane przy użyciu elementu XmlNamespaceManager
. Jeśli wyrażenie XPath zawiera prefiks, należy dodać parę identyfikatorów URI prefiksu i przestrzeni nazw do XmlNamespaceManager
klasy .
Uwaga
Jeśli wyrażenie XPath nie zawiera prefiksu, zakłada się, że identyfikator URI przestrzeni nazw jest pustą przestrzenią nazw. Jeśli kod XML zawiera domyślną przestrzeń nazw, nadal musisz dodać prefiks i identyfikator URI przestrzeni nazw do XmlNamespaceManager
obiektu . W przeciwnym razie nie zostaną wybrane żadne węzły. Aby uzyskać więcej informacji, zobacz Wybieranie węzłów przy użyciu nawigacji XPath.
Jeśli na przykład masz następujący kod XML:
<bookstore xmlns="http://www.lucernepublishing.com">
<book>
<title>Pride And Prejudice</title>
</book>
</bookstore>
Poniższy kod w języku C# wybiera wszystkie węzły książki:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);
Uwaga
Typowym problemem podczas formułowania wyrażeń XPath jest sposób uwzględnienia pojedynczego cudzysłowu (') lub podwójnego cudzysłowu (") w wyrażeniu. Jeśli musisz wyszukać wartość zawierającą pojedynczy cudzysłów, musisz ująć ciąg w cudzysłowy. Jeśli musisz wyszukać wartość zawierającą podwójny cudzysłów, musisz ująć ciąg w cudzysłów pojedynczych.
Załóżmy na przykład, że masz następujący kod XML:
<bookstore xmlns="http://www.lucernepublishing.com">
<book>
<title>'Emma'</title>
</book>
</bookstore>
Poniższy kod języka Visual Basic wybiera element zawierający pojedyncze cudzysłowy:
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)
Ta metoda jest rozszerzeniem firmy Microsoft do modelu obiektów dokumentów (DOM).
XmlNodeList Obiekt zwrócony przez tę metodę będzie prawidłowy, gdy podstawowy dokument pozostanie niezmieniony. Jeśli podstawowy dokument ulegnie zmianie, mogą zostać zwrócone nieoczekiwane wyniki (nie zostanie zgłoszony wyjątek).