XmlNode.SelectSingleNode Метод

Определение

Выделяет первый объект XmlNode, соответствующий выражению XPath.Selects the first XmlNode that matches the XPath expression.

Перегрузки

SelectSingleNode(String)

Выделяет первый объект XmlNode, соответствующий выражению XPath.Selects the first XmlNode that matches the XPath expression.

SelectSingleNode(String, XmlNamespaceManager)

Выделяет первый объект XmlNode, соответствующий выражению XPath.Selects the first XmlNode that matches the XPath expression. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного XmlNamespaceManager.Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

Примеры

В следующем примере возвращается первая книга с соответствующим именем автора.The following example returns the first book with the matching author name. Объект XmlNamespaceManager разрешает пространство имен по умолчанию в выражении XPath.The XmlNamespaceManager resolves the default namespace in the XPath expression.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( L"newbooks.xml" );
   
   // Create an XmlNamespaceManager to resolve the default namespace.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( L"bk", L"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( L"descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr );
   Console::WriteLine( book->OuterXml );
   return 0;
}

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

В качестве входных данных в примере используется файл newbooks.xml.The example uses the file, newbooks.xml, as 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>

Комментарии

Выражения XPath могут включать пространства имен.XPath expressions can include namespaces. Разрешение пространства имен поддерживается с помощью объекта XmlNamespaceManager.Namespace resolution is supported using the XmlNamespaceManager. Если выражение XPath содержит префикс, то в XmlNamespaceManager необходимо добавить пару префиксов и URI пространства имен.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Примечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Если XML содержит пространство имен по умолчанию, необходимо по-прежнему добавить префикс и URI пространства имен в XmlNamespaceManager; в противном случае выбранные узлы не будут получены.If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get any nodes selected. Дополнительные сведения см. в разделе Выбор узлов с помощью навигации XPath.For more information, see Select Nodes Using XPath Navigation.

SelectSingleNode(String)

Выделяет первый объект XmlNode, соответствующий выражению XPath.Selects the first XmlNode that matches the XPath expression.

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

Параметры

xpath
String

Выражение XPath.The XPath expression. См. раздел Примеры XPath.See XPath Examples.

Возвраты

Первый объект XmlNode, соответствующий запросу XPath, или значение null, если соответствующий узел не найден.The first XmlNode that matches the XPath query or null if no matching node is found.

Исключения

Выражение XPath, содержащее префикс.The XPath expression contains a prefix.

Примеры

В следующем примере изменяется цена первой книги Джейн Аустен.The following example changes the price of the first Jane Austen book.

#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" );
   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 );
}

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

В качестве входных данных в примере используется файл booksort.xml.The example uses the file, booksort.xml, as 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>

Комментарии

Если для выражения XPath требуется разрешение пространства имен, необходимо использовать перегрузку SelectSingleNode, которая принимает XmlNamespaceManager в качестве аргумента.If the XPath expression requires namespace resolution, you must use the SelectSingleNode overload which takes an XmlNamespaceManager as its argument. @No__t-0 используется для разрешения пространств имен.The XmlNamespaceManager is used to resolve namespaces.

Примечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Если XML содержит пространство имен по умолчанию, необходимо по-прежнему использовать XmlNamespaceManager и добавить в него префикс и URI пространства имен; в противном случае выбранный узел не будет получен.If your XML includes a default namespace, you must still use the XmlNamespaceManager and add a prefix and namespace URI to it; otherwise, you will not get a selected node. Дополнительные сведения см. в разделе Выбор узлов с помощью навигации XPath.For more information, see Select Nodes Using XPath Navigation.

Примечание

Распространенная ошибка, при которой выражения XPath составления — это включение одинарной кавычки (') или двойной кавычки (") в выражении.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. Если необходимо выполнить поиск значения, содержащего одинарную кавычку, необходимо заключить строку в двойные кавычки.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. Если необходимо выполнить поиск значения, содержащего двойную кавычку, необходимо заключить строку в одинарные кавычки.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Например, предположим, что у вас есть следующий код XML:For example, suppose you have the following XML:

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

Следующий Visual Basic код выбирает элемент, содержащий одинарные кавычки:The following Visual Basic code selects an element that contains single quotes:

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

Этот метод является расширением Майкрософт для модель DOM (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

Дополнительно

SelectSingleNode(String, XmlNamespaceManager)

Выделяет первый объект XmlNode, соответствующий выражению XPath.Selects the first XmlNode that matches the XPath expression. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного XmlNamespaceManager.Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

public:
 System::Xml::XmlNode ^ SelectSingleNode(System::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

Параметры

xpath
String

Выражение XPath.The XPath expression. См. раздел Примеры XPath.See XPath Examples.

nsmgr
XmlNamespaceManager

XmlNamespaceManager служит для разрешения пространств имен для префиксов в выражении XPath.An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

Возвраты

Первый объект XmlNode, соответствующий запросу XPath, или значение null, если соответствующий узел не найден.The first XmlNode that matches the XPath query or null if no matching node is found.

Исключения

Выражение XPath содержит префикс, который не определен в XmlNamespaceManager.The XPath expression contains a prefix which is not defined in the XmlNamespaceManager.

Примеры

В следующем примере выбирается книга с соответствующим значением ISBN.The following example selects the book with the matching ISBN value.

#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" );
   
   //Create an XmlNamespaceManager for resolving namespaces.
   XmlNamespaceManager^ nsmgr = gcnew 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->Item[@bk:ISBN='1-861001-57-6']", nsmgr );
   Console::WriteLine( book->OuterXml );
}

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

В качестве входных данных в примере используется файл booksort.xml.The example uses the file, booksort.xml, as 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>

Комментарии

Выражения XPath могут включать пространства имен.XPath expressions can include namespaces. Разрешение пространства имен поддерживается с помощью объекта XmlNamespaceManager.Namespace resolution is supported using the XmlNamespaceManager. Если выражение XPath содержит префикс, то в XmlNamespaceManager необходимо добавить пару префиксов и URI пространства имен.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Примечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Если XML содержит пространство имен по умолчанию, необходимо по-прежнему добавить префикс и URI пространства имен в XmlNamespaceManager; в противном случае узел не будет выбран.If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get a node selected. Дополнительные сведения см. в разделе Выбор узлов с помощью навигации XPath.For more information, see Select Nodes Using XPath Navigation.

Например, если у вас есть следующий код XML:For example, if you had the following XML:

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

Следующий C# код выбирает первый узел книги:The following C# code selects the first book node:

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

Примечание

Распространенная ошибка, при которой выражения XPath составления — это включение одинарной кавычки (') или двойной кавычки (") в выражении.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. Если необходимо выполнить поиск значения, содержащего одинарную кавычку, необходимо заключить строку в двойные кавычки.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. Если необходимо выполнить поиск значения, содержащего двойную кавычку, необходимо заключить строку в одинарные кавычки.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Например, предположим, что у вас есть следующий код XML:For example, suppose you have the following XML:

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

Следующий Visual Basic код выбирает элемент, содержащий одинарные кавычки:The following Visual Basic code selects an element that contains single quotes:

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)  

Этот метод является расширением Майкрософт для модель DOM (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

Дополнительно

Применяется к