Все способы имеют свои преимущества и недостатки. Использование атрибутов дает меньший объем документа. Использование элементов дает большую гибкость при внесении изменений. Например, вы можете разбить имя на три составляющие: FirstName, MiddleName и LastName и изменять их независимо. С помощью атрибутов сделать это сложнее. Другим преимуществом использования элементов является то, что с помощью атрибута сложно задать несколько телефонов (каждый атрибут должен встречаться один раз), а с помощью элементов—легко.
<Customer CustID="102">Graem Malcolm
<Phone>555-3344</Phone>
<Phone>8-921-922-5333</Phone>
<Phone>8-921-933-5444</Phone>
</Customer>
Создайте копию старого проекта StudentsOleDb, в котором мы работали с объектами DataSet и DbDataAdapter. Переименуйте его в Watson. Это имя выбрано в честь автора книги (Karli Watson. Beginning C# 2005 Databases), материалы которой использованы в этом разделе.
· С помощью рефакторинга переименуйте пространство имен (namespace Watson).
· В папку проекта вложена папка Data, в которой находится файл с базой данных Students.mdb. Если папка отсутствует, то создайте ее с помощью контекстного меню окна Solution Explorer. В нее мы добавим файлы с данными (xml и xsd).
В проекте имеется объект ds класса DataSet. Посмотрим, как будут выглядеть данные DataSet, если сохранить их двумя разными способами: методом WriteXml класса DataSet и методом Serialize, класса BinaryFormatter. Наиболее просто реализовать метод WriteXml, который имеет 8 совмещенных версий.
· Добавьте в BindingNavigator кнопку с именем btnSaveXml и текстом Save XML.
· Добавьте ветвь обработки ее нажатия в метод bn_ItemClicked.
case "Save XML": ds.WriteXml (@"..\..\Data\Students.xml", XmlWriteMode.WriteSchema); break;
Режим записи набора данных настраивается с помощью перечисления XmlWriteMode. Оно имеет такие значения: DiffGram, IgnoreSchema, WriteSchema. Установка DiffGram записывает весь DataSet, включая original и current-значения. Чтобы записать только changed (измененные) значения, надо вызвать GetChanges (он вернет новый DataSet), а затем вызвать WriteXml и задать DiffGram. Установка IgnoreSchema записывает DataSet без схемы, а WriteSchema записывает в XML-файл и схему и данные.
· Запустите приложение и нажмите кнопку Save XML.
· Закройте приложение и откройте файл Students.xml в рамках студии.
Студия, как вы знаете, имеет целый набор специальных редакторов, один из которых используется для просмотра и редактирования XML-файлов. Установка режима записи WriteSchema обеспечила вывод в файл Students.xml схемы документа, так и его данных. Вслед за корневым элементом <StudsExams> идет схема, она ограничена тегами <xs:schema> . . .</xs:schema>. За ней следуют данные. Рассмотрим сначала содержимое XML-документа.
<?xml version="1.0" standalone="yes"?>
<StudsExams>
. . . <!-- Здесь следует схема документа. Мы рассмотрим ее позже -->
. . . <!-- Далее следует сам документ. Рассмотрим его фрагиент -->
<Studs>
<StudID>1</StudID>
<Name>Василий Кузнецов</Name>
<Phone>111-11-11</Phone>
<Addr>Большой пр. 11-111</Addr>
</Studs>
<Studs>
<StudID>2</StudID>
<Name>Илья Перевалов</Name>
. . .
</Studs>
. . <!-- После таблицы студентов следуют данные таблицы экзаменов -->
<Exams>
<ExamID>1</ExamID>
<StudID>1</StudID>
<Course>Math</Course>
<Credit>true</Credit>
<Date>2006-01-01T00:00:00+03:00</Date>
<Mark>5</Mark>
</Exams>
<Exams>
<ExamID>2</ExamID>
<StudID>1</StudID>
. . . <!-- Данные других экзаменов -->
</Exams>
</StudsExams>
В документе XML выделяют следующие компоненты:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.