Condividi tramite


XmlNode.SelectSingleNode Metodo

Definizione

Seleziona la prima XmlNode che corrisponde all'espressione XPath.

Overload

Nome Descrizione
SelectSingleNode(String)

Seleziona la prima XmlNode che corrisponde all'espressione XPath.

SelectSingleNode(String, XmlNamespaceManager)

Seleziona la prima XmlNode che corrisponde all'espressione XPath. Tutti i prefissi trovati nell'espressione XPath vengono risolti usando l'oggetto fornito XmlNamespaceManager.

Esempio

Nell'esempio seguente viene restituito il primo libro con il nome dell'autore corrispondente. Risolve XmlNamespaceManager lo spazio dei nomi predefinito nell'espressione XPath.

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {

      XmlDocument doc = new XmlDocument();
      doc.Load("newbooks.xml");

      // Create an XmlNamespaceManager to resolve the default namespace.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
      nsmgr.AddNamespace("bk", "urn:newbooks-schema");

      // Select the first book written by an author whose last name is Atwood.
      XmlNode book;
      XmlElement root = doc.DocumentElement;
     book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr);

      Console.WriteLine(book.OuterXml);
  }
}
Imports System.IO
Imports System.Xml

Public Class Sample

  Public Shared Sub Main()

      Dim doc As XmlDocument = New XmlDocument()
      doc.Load("newbooks.xml")

      'Create an XmlNamespaceManager for resolving namespaces.
      Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
      nsmgr.AddNamespace("bk", "urn:newbooks-schema")

      'Select the book written by an author whose last name is Atwood.
      Dim book As XmlNode 
      Dim root As XmlElement = doc.DocumentElement
      book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr)

      Console.WriteLine(book.OuterXml)

  End Sub
End Class

Nell'esempio viene usato il file , newbooks.xml, come input.

<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
  <book genre="novel" style="hardcover">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" style="other">
    <title>The Poisonwood Bible</title>
    <author>
      <first-name>Barbara</first-name>
      <last-name>Kingsolver</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>

Commenti

Le espressioni XPath possono includere spazi dei nomi. La risoluzione dello spazio dei nomi è supportata tramite .XmlNamespaceManager Se l'espressione XPath include un prefisso, il prefisso e la coppia URI dello spazio dei nomi devono essere aggiunti a XmlNamespaceManager.

Annotazioni

Se l'espressione XPath non include un prefisso, si presuppone che l'URI dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario aggiungere un prefisso e un URI dello spazio dei nomi a XmlNamespaceManager. In caso contrario, non verranno selezionati nodi. Per ulteriori informazioni, vedere Seleziona nodi utilizzando la navigazione XPath.

SelectSingleNode(String)

Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs

Seleziona la prima XmlNode che corrisponde all'espressione XPath.

public:
 System::Xml::XmlNode ^ SelectSingleNode(System::String ^ xpath);
public System.Xml.XmlNode? SelectSingleNode(string xpath);
public System.Xml.XmlNode SelectSingleNode(string xpath);
member this.SelectSingleNode : string -> System.Xml.XmlNode
Public Function SelectSingleNode (xpath As String) As XmlNode

Parametri

xpath
String

Espressione XPath.

Valori restituiti

Primo XmlNode oggetto che corrisponde alla query XPath o null se non viene trovato alcun nodo corrispondente.

Eccezioni

L'espressione XPath contiene un prefisso.

Esempio

Nell'esempio seguente viene modificato il prezzo del primo libro Jane Austen.

using System;
using System.IO;
using System.Xml;

public class Sample {

  public static void Main() {

    XmlDocument doc = new XmlDocument();
    doc.Load("booksort.xml");

    XmlNode book;
    XmlNode root = doc.DocumentElement;

    book=root.SelectSingleNode("descendant::book[author/last-name='Austen']");

    //Change the price on the book.
    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 root as XmlNode = doc.DocumentElement

    book=root.SelectSingleNode("descendant::book[author/last-name='Austen']")
 
    'Change the price on the book.
    book.LastChild.InnerText="15.95"

    Console.WriteLine("Display the modified XML document....")
    doc.Save(Console.Out)
    
  end sub
end class

Nell'esempio viene usato il file , booksort.xml, come input.


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

Commenti

Se l'espressione XPath richiede la risoluzione dello spazio dei nomi, è necessario usare l'overload SelectSingleNode che accetta come XmlNamespaceManager argomento . Viene XmlNamespaceManager utilizzato per risolvere gli spazi dei nomi.

Annotazioni

Se l'espressione XPath non include un prefisso, si presuppone che l'URI dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario usare XmlNamespaceManager e aggiungere un prefisso e un URI dello spazio dei nomi. In caso contrario, non si otterrà un nodo selezionato. Per ulteriori informazioni, vedere Seleziona nodi utilizzando la navigazione XPath.

Annotazioni

Un problema comune quando si formulano espressioni XPath è come includere una virgoletta singola (') o virgolette doppie (") nell'espressione. Se è necessario cercare un valore che include una virgoletta singola, è necessario racchiudere la stringa tra virgolette doppie. Se è necessario cercare un valore che include una virgoletta doppia, è necessario racchiudere la stringa tra virgolette singole.

Si supponga, ad esempio, di avere il codice XML seguente:

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

Il codice di Visual Basic seguente seleziona un elemento che contiene virgolette singole:

book = root.SelectSingleNode("descendant::book[title=""'Emma'""]")

Questo metodo è un'estensione Microsoft al dom (Document Object Model).

Vedi anche

Si applica a

SelectSingleNode(String, XmlNamespaceManager)

Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs
Origine:
XmlNode.cs

Seleziona la prima XmlNode che corrisponde all'espressione XPath. Tutti i prefissi trovati nell'espressione XPath vengono risolti usando l'oggetto fornito XmlNamespaceManager.

public:
 System::Xml::XmlNode ^ SelectSingleNode(System::String ^ xpath, System::Xml::XmlNamespaceManager ^ nsmgr);
public System.Xml.XmlNode? SelectSingleNode(string xpath, System.Xml.XmlNamespaceManager nsmgr);
public System.Xml.XmlNode SelectSingleNode(string xpath, System.Xml.XmlNamespaceManager nsmgr);
member this.SelectSingleNode : string * System.Xml.XmlNamespaceManager -> System.Xml.XmlNode
Public Function SelectSingleNode (xpath As String, nsmgr As XmlNamespaceManager) As XmlNode

Parametri

xpath
String

Espressione XPath.

nsmgr
XmlNamespaceManager

Oggetto XmlNamespaceManager da utilizzare per la risoluzione degli spazi dei nomi per i prefissi nell'espressione XPath.

Valori restituiti

Primo XmlNode oggetto che corrisponde alla query XPath o null se non viene trovato alcun nodo corrispondente.

Eccezioni

L'espressione XPath contiene un prefisso non definito in XmlNamespaceManager.

Esempio

Nell'esempio seguente viene selezionato il libro con il valore ISBN corrispondente.

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 the book node with the matching attribute value.
      XmlNode book;
      XmlElement root = doc.DocumentElement;
      book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr);

      Console.WriteLine(book.OuterXml);
  }
}
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 the book node with the matching attribute value.
      Dim book as XmlNode 
      Dim root as XmlElement = doc.DocumentElement
      book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr)

      Console.WriteLine(book.OuterXml)

  end sub
end class

Nell'esempio viene usato il file , booksort.xml, come input.


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

Commenti

Le espressioni XPath possono includere spazi dei nomi. La risoluzione dello spazio dei nomi è supportata tramite .XmlNamespaceManager Se l'espressione XPath include un prefisso, il prefisso e la coppia URI dello spazio dei nomi devono essere aggiunti a XmlNamespaceManager.

Annotazioni

Se l'espressione XPath non include un prefisso, si presuppone che l'URI dello spazio dei nomi sia lo spazio dei nomi vuoto. Se il codice XML include uno spazio dei nomi predefinito, è comunque necessario aggiungere un prefisso e un URI dello spazio dei nomi a XmlNamespaceManager. In caso contrario, non si otterrà un nodo selezionato. Per ulteriori informazioni, vedere Seleziona nodi utilizzando la navigazione XPath.

Ad esempio, se si dispone del codice XML seguente:

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

Il codice C# seguente seleziona il primo nodo libro:

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

Annotazioni

Un problema comune quando si formulano espressioni XPath è come includere una virgoletta singola (') o virgolette doppie (") nell'espressione. Se è necessario cercare un valore che include una virgoletta singola, è necessario racchiudere la stringa tra virgolette doppie. Se è necessario cercare un valore che include una virgoletta doppia, è necessario racchiudere la stringa tra virgolette singole.

Si supponga, ad esempio, di avere il codice XML seguente:

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

Il codice di Visual Basic seguente seleziona un elemento che contiene virgolette singole:

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com")
book = root.SelectSingleNode("descendant::ab:book[ab:title=""'Emma'""]", nsmgr)

Questo metodo è un'estensione Microsoft al dom (Document Object Model).

Vedi anche

Si applica a