XmlNode.SelectSingleNode Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выделяет первый объект XmlNode
, соответствующий выражению XPath.
Перегрузки
SelectSingleNode(String) |
Выделяет первый объект |
SelectSingleNode(String, XmlNamespaceManager) |
Выделяет первый объект |
Примеры
В следующем примере возвращается первая книга с соответствующим именем автора. Объект XmlNamespaceManager
разрешает пространство имен по умолчанию в выражении XPath.
#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
.
<?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 содержит префикс, необходимо добавить пару URI префикса и пространства имен в XmlNamespaceManager
.
Примечание
Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо по-прежнему добавить префикс и URI пространства имен в ; в XmlNamespaceManager
противном случае узлы не будут выбраны. Дополнительные сведения см. в разделе Выбор узлов с помощью XPath Navigation.
SelectSingleNode(String)
- Исходный код:
- 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. См. раздел Примеры XPath.
Возвращаемое значение
Первый объект XmlNode
, соответствующий запросу XPath, или значение null
, если соответствующий узел не найден.
Исключения
Выражение XPath, содержащее префикс.
Примеры
В следующем примере изменяется цена первой книги Джейн Остин.
#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
.
<?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>'Emma'</title>
</book>
</bookstore>
Следующий код Visual Basic выбирает элемент, содержащий одинарные кавычки:
book = root.SelectSingleNode("descendant::book[title=""'Emma'""]")
Этот метод является расширением Майкрософт для модели DOM.
См. также раздел
- SelectNodes(String)
- Выбор XPath, пользовательские функции и многое другое
- Рекомендация W3C XPath 1.0
Применяется к
SelectSingleNode(String, XmlNamespaceManager)
- Исходный код:
- 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. См. раздел Примеры XPath.
- nsmgr
- XmlNamespaceManager
XmlNamespaceManager служит для разрешения пространств имен для префиксов в выражении XPath.
Возвращаемое значение
Первый объект XmlNode
, соответствующий запросу XPath, или значение null
, если соответствующий узел не найден.
Исключения
Выражение XPath содержит префикс, который не определен в XmlNamespaceManager
.
Примеры
В следующем примере выбирается книга с соответствующим значением ISBN.
#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
.
<?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 содержит префикс, необходимо добавить пару URI префикса и пространства имен в XmlNamespaceManager
.
Примечание
Если выражение 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>'Emma'</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.