XmlNode.SelectSingleNode Метод

Определение

Выбирает первое XmlNode , которое соответствует выражению XPath.

Перегрузки

Имя Описание
SelectSingleNode(String)

Выбирает первое XmlNode , которое соответствует выражению XPath.

SelectSingleNode(String, XmlNamespaceManager)

Выбирает первое XmlNode , которое соответствует выражению XPath. Все префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного XmlNamespaceManager.

Примеры

В следующем примере возвращается первая книга с соответствующим именем автора. Разрешение XmlNamespaceManager пространства имен по умолчанию в выражении 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

В этом примере файл newbooks.xmlиспользуется в качестве входных данных.

<?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 могут включать пространства имен. Разрешение пространства имен поддерживается с помощью XmlNamespaceManager. Если выражение XPath содержит префикс, в него необходимо добавить XmlNamespaceManagerпрефикс и пару URI пространства имен.

Замечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо добавить префикс и универсальный код ресурса (URI) пространства имен в него XmlNamespaceManager; в противном случае вы не получите выбранные узлы. Дополнительные сведения см. в разделе "Выбор узлов с помощью XPath Navigation".

SelectSingleNode(String)

Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs

Выбирает первое XmlNode , которое соответствует выражению 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

Параметры

xpath
String

Выражение XPath.

Возвращаемое значение

Первое XmlNode , которое соответствует запросу XPath или null не найдено соответствующего узла.

Исключения

Выражение XPath содержит префикс.

Примеры

В следующем примере изменяется цена первой книги Джейн Аустен.

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используется в качестве входных данных.


<?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 . Используется XmlNamespaceManager для разрешения пространств имен.

Замечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо по-прежнему использовать XmlNamespaceManager префикс и универсальный код ресурса (URI) пространства имен. В противном случае вы не получите выбранный узел. Дополнительные сведения см. в разделе "Выбор узлов с помощью XPath Navigation".

Замечание

Распространенная проблема при разработке выражений XPath заключается в том, как включить в выражение одинарный кавычки (') или двойные кавычки ("). Если необходимо искать значение, включающее одну кавычку, необходимо заключить строку в двойные кавычки. Если необходимо выполнить поиск значения, включающего двойную кавычку, необходимо заключить строку в одинарные кавычки.

Например, предположим, что у вас есть следующий XML-код:

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

Следующий Visual Basic код выбирает элемент, содержащий одинарные кавычки:

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

Этот метод представляет собой расширение Майкрософт объектной модели документа (DOM).

См. также раздел

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

SelectSingleNode(String, XmlNamespaceManager)

Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs
Исходный код:
XmlNode.cs

Выбирает первое XmlNode , которое соответствует выражению XPath. Все префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного 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

Параметры

xpath
String

Выражение XPath.

nsmgr
XmlNamespaceManager

Значение, используемое XmlNamespaceManager для разрешения пространств имен для префиксов в выражении XPath.

Возвращаемое значение

Первое XmlNode , которое соответствует запросу XPath или null не найдено соответствующего узла.

Исключения

Выражение XPath содержит префикс, который не определен в XmlNamespaceManager.

Примеры

В следующем примере выбирается книга с соответствующим значением ISBN.

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используется в качестве входных данных.


<?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 могут включать пространства имен. Разрешение пространства имен поддерживается с помощью XmlNamespaceManager. Если выражение XPath содержит префикс, в него необходимо добавить XmlNamespaceManagerпрефикс и пару URI пространства имен.

Замечание

Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо добавить префикс и универсальный код ресурса (URI) пространства имен в него XmlNamespaceManager; в противном случае вы не получите выбранный узел. Дополнительные сведения см. в разделе "Выбор узлов с помощью XPath Navigation".

Например, если у вас есть следующий XML-код:

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

Следующий код C# выбирает первый узел книги:

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

Замечание

Распространенная проблема при разработке выражений XPath заключается в том, как включить в выражение одинарный кавычки (') или двойные кавычки ("). Если необходимо искать значение, включающее одну кавычку, необходимо заключить строку в двойные кавычки. Если необходимо выполнить поиск значения, включающего двойную кавычку, необходимо заключить строку в одинарные кавычки.

Например, предположим, что у вас есть следующий XML-код:

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

Следующий Visual Basic код выбирает элемент, содержащий одинарные кавычки:

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).

См. также раздел

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