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

на главную

Жанры

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

Live-rpg. эволюция-3

Кронос Александр
3. Эволюция. Live-RPG
Фантастика:
боевая фантастика
6.59
рейтинг книги
Live-rpg. эволюция-3

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Делегат

Астахов Евгений Евгеньевич
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Делегат

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Курсант: Назад в СССР 11

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

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Восход. Солнцев. Книга XI

Скабер Артемий
11. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга XI

Мимик нового Мира 4

Северный Лис
3. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 4