Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

 // создать и задать атрибуты элемента "book"

 newBook.SetAttribute("genre","Mystery");

 newBook.SetAttribute("publicationdate", "2001");

 newBook.SetAttribute("ISBN", "123456789");

 // создать элемент 'title'

 XmlElement newTitle=doc.CreateElement("title");

 newTitle.InnerText="Case of the Missing Cookie";

 newBook.AppendChild(newTitle);

 // создать элемент author

 XmlElement newAuthor=doc.CreateElement("author");

 newBook.AppendChild(newAuthor);

 //
создать элемент name

 XmlElement newName=doc.CreateElement("name");

 newName.InnerText="C. Monster";

 newAuthor.AppendChild(newName);

 // создать элемент price

 XmlElement newPrice=doc.CreateElement("price");

 newPrice.InnerText="9.95";

 newBook.AppendChild(newPrice);

 // добавить элемент 'book' к doc

 doc.DocumentElement.AppendChild(newBook);

 // записать на диск Note новое имя файла booksEdit.xml

 XmlTextWriter tr=new XmlTextWriter("..\\..\\..\\booksEdit.xml", null);

 tr.Formatting=Formatting.Indented; doc.WriteContentTo(tr);

 tr.Close;

 // загрузить заголовок в окно списка

 XmlNodeList nodeLst=doc.GetElementsByTagName("title");

 foreach(XmlNode node in nodeLst) listBox1.Items.Add(node.InnerText);

}

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
, создаваемый этим кодом:

<?xml version="1.0"?>

<newBookstore>

 <book genre="Mystery" publicationdate="2001" ISBN="123456789">

<title>Case of the Missing Cookie</title>

<author>

<name>C. Monster</name>

</author>

<price>9.95</price>

 </book>

</newBookstore>

Мы

не рассмотрели всех особенностей класса
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

Пространство имен

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
.
Поделиться:
Популярные книги

Как я строил магическую империю 3

Зубов Константин
3. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 3

Ритуал для призыва профессора

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Ритуал для призыва профессора

Невеста снежного демона

Ардова Алиса
Зимний бал в академии
Фантастика:
фэнтези
6.80
рейтинг книги
Невеста снежного демона

Прорвемся, опера! Книга 3

Киров Никита
3. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 3

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Мымра!

Фад Диана
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мымра!

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Офицер Красной Армии

Поселягин Владимир Геннадьевич
2. Командир Красной Армии
Фантастика:
попаданцы
8.51
рейтинг книги
Офицер Красной Армии

Волхв пятого разряда

Дроздов Анатолий Федорович
2. Ледащий
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Волхв пятого разряда

Вамп

Парсиев Дмитрий
3. История одного эволюционера
Фантастика:
рпг
городское фэнтези
постапокалипсис
5.00
рейтинг книги
Вамп

Младший сын князя. Том 3

Ткачев Андрей Юрьевич
3. Аналитик
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Младший сын князя. Том 3

Шахта Шепчущих Глубин, Том II

Астахов Евгений Евгеньевич
3. Виашерон
Фантастика:
фэнтези
7.19
рейтинг книги
Шахта Шепчущих Глубин, Том II

Наследник пепла. Книга I

Дубов Дмитрий
1. Пламя и месть
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник пепла. Книга I

Газлайтер. Том 9

Володин Григорий
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9