Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
private void button1_Click(object sender, System.EventArgs e) {
// создать раздел объявлений
XmlDeclaration newDoc=doc.CreateXmlDeclaration("1.0", null, null);
doc.AppendChild(newDoc);
// создать новый корневой элемент
XmlElement newRoot=doc.CreateElement("newBookstore");
doc.AppendChild(newRoot);
// создать новый элемент 'book'
XmlElement newBook=doc.CreateElement("book");
// создать и задать атрибуты элемента "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
, создаваемый этим кодом:
C. Monster
9.95
Мы не рассмотрели всех особенностей класса 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 . |
XPathDocument
не предлагает никакой функциональности класса XmlDocument
. Он имеет четыре перегружаемые версии, позволяющие открывать документ XML из файла или строки пути доступа, объекта TextReader
, объекта XmlReader
или объекта на основе Stream
.
Загрузим документ books.xml
и поработаем с ним, чтобы можно было понять, как действует навигация. Чтобы использовать эти примеры, необходимо добавить ссылки на пространства имен System.Xml.Xsl
и System.Xml.XPath
следующим образом:
using System.Xml.XPath;
using System.Xml.Xsl;
Для данного примера воспользуемся файлом bookspath.xml
. Он аналогичен books.xml
, за исключением того, что добавлены дополнительные книги. Вот код формы, который находится в папке XPathXSLSample1
:
private void button1_Click(object sender, System.EventArgs e) {
// изменить в соответствии с используемой структурой путей доступа
XPathDocument doc=new XPathDocument("..\\..\\..\\booksxpath.xml");
// создать XPathNavigator
XPathNavigator nav=((IXPathNavigable)doc).CreateNavigator();
// создать XPathNodeIterator узлов книг
// который имеют значение атрибута genre, совпадающее с novel
XPathNodeIterator iter=nav.Select("/bookstore/book[@genre='novel']");
while(iter.MoveNext()) {
LoadBook(iter.Current);
}
}
private void LoadBook(XPathNavigator lstNav) {
// Нам передали XPathNavigator определенного узла book,
// мы выберем всех прямых потомков и
// загрузим окно списка с именами и значениями
XPathNodeIterator iterBook=lstNav.SelectDescendants(XPathNodeType.Element, false);
while(iterBook.MoveNext())
listBox1.Items.Add(iterBook.Current.Name + ": " + iterBook.Current.Value);
Интервал:
Закладка: