Программирование >>  Программирование с использованием ajax 

1 ... 306 307 308 [ 309 ] 310 311 312 ... 396


5. После добавления кода конструктора на предыдущем шаге добавьте следующий код для сохранения, загрузки и отображения документа XML в конец метода

MainO в Program.cs:

string xmlFileName = @ с:\BegVCSharp\Chapter29\Xml\example2.xml ;

xdoc.Save(xmlFileName);

XDocument xdoc2 = XDocument.Load(xmlFileName);

Console.WriteLine( Содержимое xdoc2: ); Console.WriteLine(xdoc2);

Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine();

6. Откомпилируйте и выполните программе (можно просто нажать <F5> для запуска отладки). После этого в окне консоли должен появиться следующий вывод:

Содержимое xdoc2: <customers>

<customer ID= A City= New York Region= North America >

<order Item= Widget Price= 100 />

<order Item= Tire Price= 200 /> </customer>

<customer ID= B City= Mumbai Region= Asia >

<order Item= Oven Price= 501 /> </customer> </customers>

Программа завершена, нажмите Enter для продолжения:

Нажмите <Enter> для выхода из программы и очистки экрана консоли. Если использовалась комбинация <Ctrl-F5> (запуск без отладки), может понадобиться нажать <Enter> два раза.

Описание полученных результатов

Как и ранее, первый шаг - ссылка на пространство имен System.Xml. Linq. Затем идут вложенные вызовы конструкторов LINQ to XML - XDocument (), XElement () и XAttribute 0 . Объяснение этих частей кода, которые повторяются здесь, ищите в описании первого примера.

После создания объекта XDocument вы специфицируете имя файла в виде строки и сохраняете документ XML в файл вызовом метода Save ():

string xmlFileName = @ с:\BegVCSharp\Chapter29\Xml\example2.xml ; xdoc.Save(xmlFileName);

Хотя в данном конкретном случае вы сохраняете в файл с определенным именем файла, метод Save () также имеет перегрузки для сохранения в System. 10. TextWriter или System.Xml .XmlWriter, что может подойти, если придется разрабатывать другую программу, в которой применяется один из этих классов для записи в файл.

Метод Save () также имеет перегрузку, с помощью которой можно специфицировать SaveOptions для отключения форматирования (по умолчанию XML-документ сохраняется с отступами и пробелами для улучшения читабельности).

После сохранения документа в файл он загружается в новый экземпляр XDocument по имени xdoc2:

XDocument xdoc2 = XDocument.Load(xmlFileName);



Метод XDocument. Load О - статический, поскольку это метод типа фабрики, который создает новый экземпляр XDocument (); его можно использовать для загрузки документа, созданного совершенно другой программой.

Затем документ отображается точно так же, как ранее, но на этот раз с использованием экземпляра xdoc2, загруженного из файла. Остальная часть программы остается такой же, как и в предыдущем примере:

Console.WriteLine( Содержимое xdoc2: ); Console.WriteLine(xdoc2);

Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine();

Загрузка XML из строки

Иногда вместо загрузки XML из файла он присылается другой программой в виде строки - через один или более методов. В LINQ to XML создавать XML-документы можно из строк, используя для этого метод Parse О :

XDocument xdoc = XDocument.Parse (@ <customers>

<customer ID= A City= New York Region= North America >

<order Item= Widget Price= 100 />

<order Item= Tire Price= 200 /> </customer>

<customer ID= B City= Mumbai Region= Asia >

<order Item= Oven Price= 501 /> </customer> </customers>

Это произведет тот же результат, что и загрузка документа из файла. Как и Load (), Parse О - метод уровня класса,-создающий новый экземпляр XDocument; конструировать новый объект XDocument перед вызовом метода Parse () не нужно.

Хотя строковый литерал XML из предыдущего примера имеет удвоенные кавычки ( ), в действительном содержимом строки они не удваиваются. Удвоенные кавычки - просто соглашение, позволяющее включать кавычки в строковый литерал, помеченный символом @ в начале.

Содержимое сохраненного документа XML

Воспользуйтесь Internet Explorer для открытия только что сохраненного в предыдущем примере документа. Укажите в адресной строке полное путевое имя - С: \BegVCSharp\ Chapter29\Xml\example2 .xml. Вы увидите документ, как показано на рис. 29.1.


<>xml versran= l.O encoding =utf-8 7 <custonners>

<customer ID=A City = New York Region=North America

<ord€r ltem=Wklget Pnce= 100 />

<order 11ет= ППге Pnce= 200 /> </customer:>

<customer ID=B City=Mumbar Яедюп=А51а > <order Item=Oven* Ргк:е=501*

</customer> </customer5>

Puc. 29.1. Просмотр С: \BegVCSharp\Chapter29\Xml\example2 .xml в Internet Explorer



950 Часть IV. Д оступ к данным

Обратите внимание, что объявление XML-документа <?xml version= 1. О encoding= utf-8 ?> появляется в начале сохраненного документа, даже несмотря на то, что оно не отображается, когда объект XDocument выводится на экран методом Console. Writeline (). Беспокоиться об объявлении и многих других деталях XML незачем - можно положиться на поведение по умолчанию, предлагаемое LINQ to XML.

Кодировка по умолчанию XML-документов в Windows - UTF-8 (8-битный формат Unicode Transformation Format). Вам не придется изменять это за исключением очень редких ситуаций, таких как создание кодированного в ASCII документа XML, который может понадобиться для унаследованной программы, не воспринимающей UTF-8. В таком случае можно либо добавить объект XDeclaration () с кодировкой, установленной в ASCII, в начало списка параметров для конструктора XDocument (), либо установить свойство Declaration объекта XDocument:

xdoc.Declaration = new XDeclaration ( 1.О , us-ascii , yes );

Работа с фрагментами XML

В отличие от некоторых API-интерфейсов для XML, LINQ to XML может работать с фрагментами XML (частичными или неполными документами XML) почти таким же образом, как и с полными документами XML. При работе с фрагментом, вы просто имеете дело с XElement в качестве объекта верхнего уровня вместо XDocument.

Единственное ограничение к сказанному состоит в том, что вы не может£ добавлять никаки£ другие более эзотерические типы узлов, применимые только к XDocument, вроде XComment для комментариев XML, XDeclaration для объявления документов XML и XProcessinglnstruction для инструкций обработки XML.

В следующем практическом занятии вы загрузите, сохраните и будете манипулировать элементом XML и его дочерними узлами, как уже это делалось с документом XML.

Практическое занятие работа С фрагментами XML

Для создания примера выполните следующие шаги в Visual С# 2008.

1. Либо модифицируйте предыдущий пример, либо создайте новое консольное приложение по имени BegVCSharp 29 3 XMLFragments в каталоге С: \BegVCSHarp\ Chapter29.

2. Откройте главный файл Program.cs.

3. Добавьте ссылку к пространству имен System.Xml.Linq в начало Program.cs, как показано ниже:

using System;

using System.Collections.Generic; using System.Linq; using Sys tem. Xinl. Linq;

using System.Text;

Если вы модифицируете предыдущий пример, эта строка уже есть.

4. Добавьте элемент XML без включающего конструктора документа XML, использованного в предыдущем примере, к методу Main () в Program, cs:



1 ... 306 307 308 [ 309 ] 310 311 312 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика