Sdílet prostřednictvím


XmlNode.SelectNodes Metoda

Definice

Vybere seznam uzlů odpovídajících výrazu XPath.

Přetížení

SelectNodes(String)

Vybere seznam uzlů odpovídajících výrazu XPath.

SelectNodes(String, XmlNamespaceManager)

Vybere seznam uzlů odpovídajících výrazu XPath. Všechny předpony nalezené ve výrazu XPath se přeloží pomocí zadaného XmlNamespaceManagerobjektu .

Poznámky

Výrazy XPath můžou zahrnovat obory názvů. Překlad oboru názvů se podporuje pomocí XmlNamespaceManagernástroje . Pokud výraz XPath obsahuje předponu, musí být do objektu přidán pár identifikátoru URI předpony XmlNamespaceManagera 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 váš XML obsahuje výchozí obor názvů, musíte k němu přesto přidat předponu XmlNamespaceManagera identifikátor URI oboru názvů. V opačném případě nebudete mít vybrané žádné uzly.

Další informace najdete v tématu Výběr uzlů pomocí navigace XPath. V případě příkladů kódu zvolte přetížení ze seznamu přetížení v předchozí části.

SelectNodes(String)

Zdroj:
XmlNode.cs
Zdroj:
XmlNode.cs
Zdroj:
XmlNode.cs

Vybere seznam uzlů odpovídajících 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

Obsahující XmlNodeList kolekci uzlů odpovídajících 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, jejichž příjmení autora je 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í kód 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 překlad oboru názvů, musíte použít SelectNodes přetížení, které jako argument přebírá XmlNamespaceManager . Slouží XmlNamespaceManager 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 XmlNamespaceManager a přidat do něj předponu a identifikátor URI oboru názvů. V opačném případě nebudete mít vybrané žádné uzly. Další informace najdete v tématu Výběr uzlů pomocí navigace XPath.

Poznámka

Běžným problémem při formulaci výrazů XPath je, jak do výrazu zahrnout jednoduchou uvozovku (') nebo dvojitou uvozovku ("). Pokud potřebujete vyhledat hodnotu, která obsahuje jednoduchou 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>&apos;Emma&apos;</title>
  </book>
</bookstore>

Následující kód jazyka Visual Basic vybere prvek, který obsahuje jednoduché uvozovky:

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

Tato metoda je rozšířením modelu DOM (Document Object Model) od Microsoftu.

Objekt XmlNodeList vrácený touto metodou bude platný, dokud podkladový dokument zůstane beze změny. Pokud se podkladový dokument změní, můžou se vrátit neočekávané výsledky (nevyvolá se žádná výjimka).

Viz také

Platí pro

SelectNodes(String, XmlNamespaceManager)

Zdroj:
XmlNode.cs
Zdroj:
XmlNode.cs
Zdroj:
XmlNode.cs

Vybere seznam uzlů odpovídajících výrazu XPath. Všechny předpony nalezené ve výrazu XPath se přeloží pomocí zadaného XmlNamespaceManagerobjektu .

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

Obsahující XmlNodeList kolekci uzlů odpovídajících dotazu XPath.

Výjimky

Výraz XPath obsahuje předponu, která není definována v objektu XmlNamespaceManager.

Příklady

Následující příklad zobrazuje 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

V příkladu se jako vstup používá soubor booksort.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

Výrazy XPath můžou zahrnovat obory názvů. Překlad oboru názvů se podporuje pomocí XmlNamespaceManagernástroje . Pokud výraz XPath obsahuje předponu, musí být do objektu přidán pár identifikátoru URI předpony XmlNamespaceManagera 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 váš XML obsahuje výchozí obor názvů, musíte k němu přesto přidat předponu XmlNamespaceManagera identifikátor URI oboru názvů. V opačném případě nebudete mít vybrané žádné uzly. Další informace najdete v tématu Výběr uzlů pomocí navigace XPath.

Například pokud jste 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, jak do výrazu zahrnout jednoduchou uvozovku (') nebo dvojitou uvozovku ("). Pokud potřebujete vyhledat hodnotu, která obsahuje jednoduchou 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>&apos;Emma&apos;</title>
  </book>
</bookstore>

Následující kód jazyka Visual Basic 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 modelu DOM (Document Object Model) od Microsoftu.

Objekt XmlNodeList vrácený touto metodou bude platný, dokud podkladový dokument zůstane beze změny. Pokud se podkladový dokument změní, můžou se vrátit neočekávané výsledky (nevyvolá se žádná výjimka).

Viz také

Platí pro