XmlNode.SelectNodes Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выбирает список узлов в соответствии с выражением XPath.
Перегрузки
SelectNodes(String) |
Выбирает список узлов в соответствии с выражением XPath. |
SelectNodes(String, XmlNamespaceManager) |
Выбирает список узлов в соответствии с выражением XPath. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного XmlNamespaceManager. |
Комментарии
Выражения XPath могут включать пространства имен. Разрешение пространства имен поддерживается с помощью объекта XmlNamespaceManager
. Если выражение XPath содержит префикс, необходимо добавить префикс и пару URI пространства имен в XmlNamespaceManager
.
Примечание
Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо по-прежнему добавить префикс и URI пространства имен в ; в XmlNamespaceManager
противном случае вы не получите выбранные узлы.
Дополнительные сведения см. в разделе Выбор узлов с помощью XPath Navigation. Для примеров кода выберите перегрузку из списка перегрузки в предыдущем разделе.
SelectNodes(String)
- Исходный код:
- XmlNode.cs
- Исходный код:
- XmlNode.cs
- Исходный код:
- XmlNode.cs
Выбирает список узлов в соответствии с выражением XPath.
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
Параметры
- xpath
- String
Выражение XPath.
Возвращаемое значение
XmlNodeList, содержащий коллекцию узлов, соответствующих запросу XPath.
Исключения
Выражение XPath, содержащее префикс. См. раздел Примеры XPath.
Примеры
В следующем примере выбираются все книги с фамилией автора Austen, а затем изменяется цена этих книг.
#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" );
XmlNodeList^ nodeList;
XmlNode^ root = doc->DocumentElement;
nodeList = root->SelectNodes( "descendant::book[author/last-name='Austen']" );
//Change the price on the books.
System::Collections::IEnumerator^ myEnum = nodeList->GetEnumerator();
while ( myEnum->MoveNext() )
{
XmlNode^ book = safe_cast<XmlNode^>(myEnum->Current);
book->LastChild->InnerText = "15.95";
}
Console::WriteLine( "Display the modified XML document...." );
doc->Save( Console::Out );
}
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
В этом примере используется следующий 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 требуется разрешение пространства имен, необходимо использовать перегрузку SelectNodes
, которая принимает в качестве аргумента XmlNamespaceManager .
XmlNamespaceManager
используется для разрешения пространств имен.
Примечание
Если выражение XPath не содержит префикс, предполагается, что URI пространства имен является пустым пространством имен. Если XML включает пространство имен по умолчанию, необходимо по-прежнему XmlNamespaceManager
использовать и добавить в него префикс и URI пространства имен. В противном случае вы не получите выбранные узлы. Дополнительные сведения см. в разделе Выбор узлов с помощью XPath Navigation.
Примечание
Распространенной проблемой при формулировке выражений XPath является включение в выражение одной кавычки (') или двойной кавычки ("). Если необходимо выполнить поиск значения, включающего одну кавычку, необходимо заключить строку в двойные кавычки. Если необходимо выполнить поиск значения, включающее двойные кавычки, необходимо заключить строку в одинарные кавычки.
Например, предположим, что у вас есть следующий XML-код:
<bookstore>
<book>
<title>'Emma'</title>
</book>
</bookstore>
Следующий код Visual Basic выбирает элемент, содержащий одинарные кавычки:
nodeList = root.SelectNodes("//book[contains(title,""'Emma'"")]")
Этот метод является расширением Майкрософт для модели DOM.
Объект XmlNodeList , возвращаемый этим методом, будет действительным, а базовый документ остается неизменным. При изменении базового документа могут быть возвращены непредвиденные результаты (исключение не будет).
См. также раздел
- SelectSingleNode(String)
- Выбор XPath, пользовательские функции и многое другое
- Рекомендация W3C XPath 1.0
Применяется к
SelectNodes(String, XmlNamespaceManager)
- Исходный код:
- XmlNode.cs
- Исходный код:
- XmlNode.cs
- Исходный код:
- XmlNode.cs
Выбирает список узлов в соответствии с выражением XPath. Префиксы, найденные в выражении XPath, разрешаются с помощью предоставленного 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
Параметры
- xpath
- String
Выражение XPath. См. раздел Примеры XPath.
- nsmgr
- XmlNamespaceManager
XmlNamespaceManager служит для разрешения пространств имен для префиксов в выражении XPath.
Возвращаемое значение
XmlNodeList, содержащий коллекцию узлов, соответствующих запросу XPath.
Исключения
Выражение XPath содержит префикс, который не определен в XmlNamespaceManager
.
Примеры
В следующем примере показаны значения каждого атрибута ISBN. В этом примере используется XmlElement объект , который наследуется от XmlNode класса .
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Collections;
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 and display the value of all the ISBN attributes.
XmlNodeList^ nodeList;
XmlElement^ root = doc->DocumentElement;
nodeList = root->SelectNodes( "/bookstore/book/@bk:ISBN", nsmgr );
IEnumerator^ myEnum = nodeList->GetEnumerator();
while ( myEnum->MoveNext() )
{
XmlNode^ isbn = safe_cast<XmlNode^>(myEnum->Current);
Console::WriteLine( isbn->Value );
}
}
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
В этом примере в качестве входных данных используется файл 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");
XmlNodeList nodelist = doc.SelectNodes("//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")
nodeList = root.SelectNodes("//ab:book[contains(ab:title,""'Emma'"")]", nsmgr)
Этот метод является расширением Майкрософт для модели DOM.
Объект XmlNodeList , возвращаемый этим методом, будет действительным, а базовый документ остается неизменным. При изменении базового документа могут быть возвращены непредвиденные результаты (исключение не будет).