XmlNode.SelectNodes Metod

Definition

Väljer en lista över noder som matchar XPath-uttrycket.

Överlagringar

Name Description
SelectNodes(String)

Väljer en lista över noder som matchar XPath-uttrycket.

SelectNodes(String, XmlNamespaceManager)

Väljer en lista över noder som matchar XPath-uttrycket. Alla prefix som finns i XPath-uttrycket matchas med hjälp av angivna XmlNamespaceManager.

Kommentarer

XPath-uttryck kan innehålla namnområden. Namnområdesmatchning stöds med hjälp av XmlNamespaceManager. Om XPath-uttrycket innehåller ett prefix måste prefixet och namnområdets URI-par läggas till i XmlNamespaceManager.

Note

Om XPath-uttrycket inte innehåller något prefix antas det att namnområdes-URI:n är det tomma namnområdet. Om xml-koden innehåller ett standardnamnområde måste du fortfarande lägga till ett prefix och en namnområdes-URI i XmlNamespaceManager. Annars kommer du inte att få några noder markerade.

Mer information finns i Välj noder med XPath-navigering. För kodexempel väljer du en överlagring från överlagringslistan i föregående avsnitt.

SelectNodes(String)

Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs

Väljer en lista över noder som matchar XPath-uttrycket.

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

Parametrar

xpath
String

XPath-uttrycket.

Returer

En XmlNodeList som innehåller en samling noder som matchar XPath-frågan.

Undantag

XPath-uttrycket innehåller ett prefix. Se XPath-exempel.

Exempel

I följande exempel väljs alla böcker där författarens efternamn är Austen och ändrar sedan priset på dessa böcker.

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

I det här exemplet används följande 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>

Kommentarer

Om XPath-uttrycket kräver namnområdesmatchning måste du använda den SelectNodes överlagring som tar ett XmlNamespaceManager som argument. XmlNamespaceManager Används för att matcha namnområden.

Note

Om XPath-uttrycket inte innehåller något prefix antas det att namnområdes-URI:n är det tomma namnområdet. Om din XML innehåller ett standardnamnområde måste du fortfarande använda XmlNamespaceManager och lägga till ett prefix och en namnområdes-URI till den. Annars kommer du inte att få några noder valda. Mer information finns i Välj noder med XPath-navigering.

Note

Ett vanligt problem när du formulerar XPath-uttryck är hur du inkluderar ett enda citattecken (') eller dubbla citattecken (") i uttrycket. Om du måste söka efter ett värde som innehåller ett enda citattecken måste du omsluta strängen med dubbla citattecken. Om du behöver söka efter ett värde som innehåller ett dubbelt citattecken måste du omsluta strängen med enkla citattecken.

Anta till exempel att du har följande XML:

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

Följande Visual Basic kod väljer ett element som innehåller enkla citattecken:

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

Den här metoden är ett Microsoft-tillägg till dokumentobjektmodellen (DOM).

Objektet XmlNodeList som returneras med den här metoden är giltigt medan det underliggande dokumentet förblir oförändrat. Om det underliggande dokumentet ändras kan oväntade resultat returneras (inget undantag utlöses).

Se även

Gäller för

SelectNodes(String, XmlNamespaceManager)

Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs
Källa:
XmlNode.cs

Väljer en lista över noder som matchar XPath-uttrycket. Alla prefix som finns i XPath-uttrycket matchas med hjälp av angivna XmlNamespaceManager.

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

Parametrar

xpath
String

XPath-uttrycket. Se XPath-exempel.

nsmgr
XmlNamespaceManager

En XmlNamespaceManager som ska användas för att matcha namnrymder för prefix i XPath-uttrycket.

Returer

En XmlNodeList som innehåller en samling noder som matchar XPath-frågan.

Undantag

XPath-uttrycket innehåller ett prefix som inte har definierats i XmlNamespaceManager.

Exempel

I följande exempel visas värdena för vart och ett av ISBN-attributen. I det här exemplet används ett XmlElement objekt som ärver från XmlNode klassen.

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

I exemplet används filen , booksort.xmlsom indata.


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

Kommentarer

XPath-uttryck kan innehålla namnområden. Namnområdesmatchning stöds med hjälp av XmlNamespaceManager. Om XPath-uttrycket innehåller ett prefix måste prefixet och namnområdets URI-par läggas till i XmlNamespaceManager.

Note

Om XPath-uttrycket inte innehåller något prefix antas det att namnområdes-URI:n är det tomma namnområdet. Om xml-koden innehåller ett standardnamnområde måste du fortfarande lägga till ett prefix och en namnområdes-URI i XmlNamespaceManager. Annars kommer du inte att få några noder markerade. Mer information finns i Välj noder med XPath-navigering.

Om du till exempel har följande XML:

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

Följande C#-kod väljer alla boknoder:

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

Note

Ett vanligt problem när du formulerar XPath-uttryck är hur du inkluderar ett enda citattecken (') eller dubbla citattecken (") i uttrycket. Om du måste söka efter ett värde som innehåller ett enda citattecken måste du omsluta strängen med dubbla citattecken. Om du behöver söka efter ett värde som innehåller ett dubbelt citattecken måste du omsluta strängen med enkla citattecken.

Anta till exempel att du har följande XML:

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

Följande Visual Basic kod väljer ett element som innehåller enkla citattecken:

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)

Den här metoden är ett Microsoft-tillägg till dokumentobjektmodellen (DOM).

Objektet XmlNodeList som returneras med den här metoden är giltigt medan det underliggande dokumentet förblir oförändrat. Om det underliggande dokumentet ändras kan oväntade resultat returneras (inget undantag utlöses).

Se även

Gäller för