private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) {
String srch="newBookstore/book[title='"+ listBox1.SelectedItem.ToString + "']";
XmlNode foundNode=doc.SelectSingleNode(srch);
if (foundNode!=null) MessageBox.Show(foundNode.InnerText);
else MessageBox.Show("Not found");
}
Заметим, что изменились только две начальные строки. Прежде чем сделать doc.Load
, внесем новые элементы:
XmlDeclaration newDoc=doc.CreateXmlDeclaration("1.0", null, null);
doc.AppendChild(newDoc);
XmlElement newRoot=doc.CreateElement("newBookstore");
doc.AppendChild(newRoot);
Сначала создается новый объект XmlDeclaration
. Параметрами являются версия (в настоящее время всегда "1.0"
), кодировка (null
подразумевает UTF-8
) и, наконец, флаг standalone
. Он может быть yes
или no
, но если вводится null или пустая строка, как в нашем случае, этот атрибут не будет добавляться при сохранении документа. Параметр кодировки должен задаваться строкой, которая является частью класса System.Text.Encoding
, если не используется null
.
Следующим создаваемым элементом станет DocumentElement
. В данном случае мы называем его newBookstore
, чтобы можно было видеть различие. Остальная часть кода является такой же, как и в предыдущем примере, и работает точно так же. Вот файл booksEdit.xml
, создаваемый этим кодом:
Мы не рассмотрели всех особенностей класса XmlDocument
или других классов, способствующих созданию модели DOM в .NET. Однако мы видели мощь и гибкость, которые предлагает реализация DOM в .NET. Класс XmlDocument
обычно используется, когда требуется случайный доступ к документу. Используйте классы на основе XmlReader
, когда желательна модель потокового типа. Помните, что гибкость XmlDocument
на основе XmlNode
обеспечивается более высокими требованиями к памяти, поэтому подумайте тщательно о том, какой метод предпочтительнее в конкретной ситуации.
XPath и XslTransform
Мы рассмотрим XPath
и XslTransform
вместе, хотя они являются отдельными пространствами имен на платформе. XPath
содержится в System.Xml.XPath
, a XslTransform
находится в System.Xml.Xsl
. Причина совместного рассмотрения состоит в том, что XPath
, в частности класс XPathNavigator
, предоставляет ориентированный на производительность способ выполнения XSLTransform
в .NET. Для начала рассмотрим XPath
, а затем его использование в классах System.Xsl
.
Пространство имен XPath
создается для скорости. Оно позволяет только читать документы XML без возможностей редактирования. XPath
создается для поверхностного выполнения быстрых итераций и выбора в документе XML. Функциональность XPath
представляется классом XPathNavigator
. Этот класс может использоваться вместо XmlDocument
, XmlDataDocument
и XPathDocument
. Если требуются средства редактирования, то следует выбрать XmlDocument
; при работе с ADO.NET будет использоваться класс XmlDataDocument
(мы увидим его позже в этой главе). Если имеет значение скорость, то применяйте в качестве хранилища XPathDocument
. Можно расширить XPathNavigator
для таких вещей, как файловая система или реестр в качестве хранилища. В следующей таблице перечислены классы XPath
с кратким описанием назначения каждого класса:
Имя класса | Описание |
---|---|
XPathDocument | Представление всего документа XML. Только для чтения. |
XPathNavigator | Предоставляет навигационные возможности для XPathDocument . |
XPathNodeIterator | Обеспечивает итерацию по множеству узлов. Является эквивалентом для множества узлов в Xpath . |
XPathExpression | Компилированное выражение Xpath . Используется SelectNodes , SelectSingleNodes , Evaluate и Matches . |
XPathException | Класс исключений XPath . |