XmlNode.SelectNodes Yöntem

Tanım

XPath ifadesiyle eşleşen düğümlerin listesini seçer.

Aşırı Yüklemeler

SelectNodes(String)

XPath ifadesiyle eşleşen düğümlerin listesini seçer.

SelectNodes(String, XmlNamespaceManager)

XPath ifadesiyle eşleşen düğümlerin listesini seçer. XPath ifadesinde bulunan tüm ön ekler sağlanan XmlNamespaceManagerkullanılarak çözümlenir.

Açıklamalar

XPath ifadeleri ad alanlarını içerebilir. Ad alanı çözümlemesi kullanılarak XmlNamespaceManagerdesteklenir. XPath ifadesi bir ön ek içeriyorsa, ön ek ve ad alanı URI çiftinin XmlNamespaceManageröğesine eklenmesi gerekir.

Not

XPath ifadesi bir ön ek içermiyorsa, ad alanı URI'sinin boş ad alanı olduğu varsayılır. XML'niz varsayılan bir ad alanı içeriyorsa, öğesine yine de bir ön ek ve ad alanı URI'sini XmlNamespaceManagereklemeniz gerekir; aksi takdirde hiçbir düğüm seçilmez.

Daha fazla bilgi için bkz. XPath Gezintisini Kullanarak Düğüm Seçme. Kod örnekleri için önceki bölümde yer alan aşırı yükleme listesinden bir aşırı yükleme seçin.

SelectNodes(String)

XPath ifadesiyle eşleşen düğümlerin listesini seçer.

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

Parametreler

xpath
String

XPath ifadesi.

Döndürülenler

XmlNodeList

XmlNodeList XPath sorgusuyla eşleşen düğüm koleksiyonunu içeren.

Özel durumlar

XPath ifadesi bir ön ek içerir. Bkz. XPath Örnekleri.

Örnekler

Aşağıdaki örnek, yazarın soyadının Austen olduğu tüm kitapları seçer ve ardından bu kitapların fiyatını değiştirir.

#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

Bu örnekte aşağıdaki XML kullanılır:


<?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>

Açıklamalar

XPath ifadesi ad alanı çözümlemesi gerektiriyorsa, bağımsız değişkeni olarak bir XmlNamespaceManager alan aşırı yüklemeyi kullanmanız SelectNodes gerekir. XmlNamespaceManager ad alanlarını çözümlemek için kullanılır.

Not

XPath ifadesi bir ön ek içermiyorsa, ad alanı URI'sinin boş ad alanı olduğu varsayılır. XML'niz varsayılan bir ad alanı içeriyorsa, yine de ön ekini ve ad alanı URI'sini kullanmanız XmlNamespaceManager gerekir; aksi takdirde hiçbir düğüm seçilmez. Daha fazla bilgi için bkz. XPath Gezintisini Kullanarak Düğüm Seçme.

Not

XPath ifadelerini formüle ederken sık karşılaşılan bir sorun, ifadeye tek tırnak (') veya çift tırnak (") eklenmesidir. Tek tırnak içeren bir değeri aramanız gerekiyorsa, dizeyi çift tırnak içine almanız gerekir. Çift tırnak içeren bir değeri aramanız gerekiyorsa, dizeyi tek tırnak içine almanız gerekir.

Örneğin, aşağıdaki XML'e sahip olduğunuzu varsayalım:

<bookstore>  
  <book>  
    <title>&apos;Emma&apos;</title>  
  </book>  
</bookstore>  

Aşağıdaki Visual Basic kodu, tek tırnak içeren bir öğeyi seçer:

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

Bu yöntem, Belge Nesne Modeli'nin (DOM) Bir Microsoft uzantısıdır.

XmlNodeList Bu yöntem tarafından döndürülen nesne, temel alınan belge değişmeden kalırken geçerli olur. Temel alınan belge değişirse beklenmeyen sonuçlar döndürülebilir (özel durum oluşturulmayacak).

Ayrıca bkz.

Şunlara uygulanır

SelectNodes(String, XmlNamespaceManager)

XPath ifadesiyle eşleşen düğümlerin listesini seçer. XPath ifadesinde bulunan tüm ön ekler sağlanan XmlNamespaceManagerkullanılarak çözümlenir.

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

Parametreler

xpath
String

XPath ifadesi. Bkz. XPath Örnekleri.

nsmgr
XmlNamespaceManager

XmlNamespaceManager XPath ifadesindeki ön eklerin ad alanlarını çözümlemek için kullanılacak.

Döndürülenler

XmlNodeList

XmlNodeList XPath sorgusuyla eşleşen düğüm koleksiyonunu içeren.

Özel durumlar

XPath ifadesi içinde XmlNamespaceManagertanımlanmayan bir ön ek içerir.

Örnekler

Aşağıdaki örnek, ISBN özniteliklerinin her birinin değerlerini görüntüler. Bu örnekte sınıfından XmlNode devralan bir XmlElement nesnesi kullanılır.

#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

Örnekte giriş olarak dosyası booksort.xmlkullanılır.


<?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>

Açıklamalar

XPath ifadeleri ad alanlarını içerebilir. Ad alanı çözümlemesi kullanılarak XmlNamespaceManagerdesteklenir. XPath ifadesi bir ön ek içeriyorsa, ön ek ve ad alanı URI çiftinin XmlNamespaceManageröğesine eklenmesi gerekir.

Not

XPath ifadesi bir ön ek içermiyorsa, ad alanı URI'sinin boş ad alanı olduğu varsayılır. XML'niz varsayılan bir ad alanı içeriyorsa, öğesine yine de bir ön ek ve ad alanı URI'sini XmlNamespaceManagereklemeniz gerekir; aksi takdirde hiçbir düğüm seçilmez. Daha fazla bilgi için bkz. XPath Gezintisini Kullanarak Düğüm Seçme.

Örneğin, aşağıdaki XML'e sahipseniz:

<bookstore xmlns="http://www.lucernepublishing.com">  
 <book>  
   <title>Pride And Prejudice</title>  
 </book>  
</bookstore>  

Aşağıdaki C# kodu tüm kitap düğümlerini seçer:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");  
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);  

Not

XPath ifadelerini formüle ederken sık karşılaşılan bir sorun, ifadeye tek tırnak (') veya çift tırnak (") eklenmesidir. Tek tırnak içeren bir değeri aramanız gerekiyorsa, dizeyi çift tırnak içine almanız gerekir. Çift tırnak içeren bir değeri aramanız gerekiyorsa, dizeyi tek tırnak içine almanız gerekir.

Örneğin, aşağıdaki XML'e sahip olduğunuzu varsayalım:

<bookstore xmlns="http://www.lucernepublishing.com">  
  <book>  
    <title>&apos;Emma&apos;</title>  
  </book>  
</bookstore>  

Aşağıdaki Visual Basic kodu, tek tırnak içeren bir öğeyi seçer:

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)  

Bu yöntem, Belge Nesne Modeli'nin (DOM) Bir Microsoft uzantısıdır.

XmlNodeList Bu yöntem tarafından döndürülen nesne, temel alınan belge değişmeden kalırken geçerli olur. Temel alınan belge değişirse beklenmeyen sonuçlar döndürülebilir (özel durum oluşturulmayacak).

Ayrıca bkz.

Şunlara uygulanır