Скачать 294.36 Kb.
|
Работа с различными объектами XMLПомимо возможности создания LINQ-запросов в .NET 4 предлагаются различные объекты XML, которые работают настолько хорошо, что могут иметь свое собственное место за пределами LINQ. Эти объекты могут применяться вместо непосредственной работы с DOM. Они называются вспомогательными объектами LINQ to XML, размещаются в пространстве имен System. Xml. Linq и способны значительно упростить взаимодействие с XML-документом в памяти. В следующих разделах кратко показано, как использовать доступные в этом пространстве имен объекты. Объект XDocumentОбъект XDocument является заменой объекта XmlDocument, который применялся в .NET 3.5, с ним гораздо легче работать, чем с XML-документами. Он используется совместно с другими новыми объектами в этой же области, такими как XNamespace, XComment, XElement и XAttribute. Одним из наиболее важных членов объекта XDocument является метод Load (): XDocument.Load(@"С:\Hamlet.xml"); Эта операция приведет к загрузке содержимого файла Hamlet, xml в память в виде объекта XDocument. Методу Load() можно также передавать объект TextReader или Xml Reader. После этого с XML можно работать из кода: XDocument xdoc = XDocument.Load(@"С:\Hamlet.xml"); Console.WriteLine(xdoc.Root.Name.ToString()); Console.WriteLine(xdoc.Root.HasAttributes.ToString()); Другим важным членом XDocument является метод Save (), который подобно методу Load () позволяет сохранять XML-данные на физическом диске либо в объекте TextWriter или XmlWriter: XDocument xdoc = XDocument.Load(@"С:\Hamlet.xml"); xdoc.Save(@"С:\CopyOfHamlet.xml"); Объект XElementС объектом XElement придется работать чаще всего. С его помощью легко создавать отдельные объекты элементов, представляющие собой как целые документы XML, так и их отдельные фрагменты. Ниже показан пример создания XML-элемента с соответствующим значением: XElement хе = new XElement("Company", "Lipper"); Console. WnteLme (xe. ToString ()); Объект XAttributeДругим важным фактором XML, помимо элементов, являются атрибуты. Добавлять и работать с атрибутами позволяет объект XAttribute. Ниже показан пример добавления атрибута в корневой узел <Company>: XElement xe = new XElement("Company", new XAttribute ("MyAttribute", "MyAttnbuteValue"), new XElement ("CompanyName", "Lipper"), new XElement ("CompanyAddress", new XElement ("Address", "123 Main Street"), new XElement ("City", "St. Louis"), new XElement ("State", "MO"), new XElement ("Country", "USA"))); Создание XML на основе запроса к БДvar arr = db.roads; XDocument doc=new XDocument(new XElement("root")); foreach (var i in arr) { doc.Root.Add(new XElement("road", new XAttribute("src",i.src), new XAttribute("dest",i.dest), new XElement("cost",i.cost) ) ); foreach (var b in i.builders) { doc.Root.Elements().Last().Add(new XElement("builder", new XAttribute("name", b.title), new XAttribute("beg", b.year_beg), new XAttribute("eend", b.year_end), new XElement("per", b.period))); } } doc.Save("c:\\abc.xml"); Использование LINQ для выдачи запросов к документам XMLТеперь, когда известно, как помещать XML-документы в объект XDocument и работать с различными их частями, можно посмотреть на применение LINQ to XML для выдачи запросов к XML-документам и обработки результатов. Как будет показано ниже, для запроса статического XML-документа с помощью LINQ to XML не понадобится прилагать почти никаких усилий. Ниже приведен пример выдачи запроса к файлу hamlet.xml для получения списка всех персонажей (актеров), которые принимают участие в пьесе. Каждый из этих персонажей представлен в XML-документе элементом <PERSONA>. XDocument xdoc = XDocument.Load(@"C:\hamlet.xml"); var query = from people in xdoc.Descendants("PERSONA") select people.Value; Console.WnteLine("Найдено {0} персонажей", query.Count()); Console.WnteLine(); foreach (var item in query) { Console.WnteLine (item); } Console. ReadLme (); В наши дни динамические XML-документы встречаются в Интернете очень часто. Они формируются в каналах блогов, подкастов и т.п. за счет отправки запроса по конкретному конечному ULR-адресу. Эти каналы могут просматриваться как в браузере посредством специального RSS-arpeгатора, так и в виде чистого XML. Ниже показан пример работы с RSS-каналом непосредственно из кода. XDocument xdoc = XDocument.Load(@"http://geekswithblogs.net/evjen/Rss.aspx"); Работа с документом XMLПри проработке примеров с XML-документом hamlet.xml можно было заметить, что он является довольно большим. Пока что в этой главе было показано лишь несколько способов, которыми можно запрашивать данные из XML-документов, а в следующем разделе демонстрируется методика чтения и записи данных в XML-документ. Чтение данных из документа XMLРанее уже было показано, насколько легко отправлять запросы в XML-документ с применением операторов запросов LINQ вроде следующего: var query = from people in xdoc.Descendants("PERSONA") select people.Value; Этот запрос возвращает всех персонажей, найденных в документе. С использованием метода Element () объекта XDocument из XML-документа можно извлечь конкретные значения, с которым будет производиться работа. Например, следующий фрагмент XML показывает, каким образом в документе hamlet .xml представлен элемент <TITLE>: XML удален для ясности—> Нетрудно заметить, что элемент TITLE> вложен в элемент <PLAY>. Следовательно, к нему легко добраться с помощью следующего фрагмента кода в консольном приложении: XDocument xdoc = XDocument.Load(@"С:\hamlet.xml"); Console.WriteLine(xdoc.Element("PLAY").Element("TITLE").Value); Запись данных в документ XMLЗапись данных в документ XML осуществляется так же легко, как и чтение. Например, чтобы изменить имя первого персонажа в файле hamlet. xml, можно воспользоваться следующим кодом: XDocument xdoc = XDocument.Load(@"C:\hamlet.xml"); xdoc.Element("PLAY").Element("PERSONAE").Element("PERSONA").SetValue("Bill Evjen, king of Denmark"); Console.WriteLine(xdoc.Element("PLAY").Element("PERSONAE").Element("PERSONA").Value); В данном случае первый экземпляр элемента <PERSONA> перезаписывается значением Bill Evjen, king of Denmark с помощью метода SetValue() объекта Element(). После вызова метода SetValue() и применения значения к XML-документу это значение затем извлекается с использованием того же подхода, что раньше. После выполнения этого фрагмента кода можно увидеть, что значение первого элемента <PERSONA> изменилось. Другим способом изменения документа (в рассматриваемом примере — для добавления в него элементов) является создание нужных элементов в виде объектов XElement и затем их добавление в документ. XDocument xdoc = XDocument.Load(@"C:\hamlet.xml"); XElement xe = new XElement("PERSONA","Bill Evjen, king of Denmark"); xdoc.Element("PLAY").Element("PERSONAE").Add(xe); var query = from people in xdoc.Descendants("PERSONA") select people.Value; Console.WriteLine("Найдено {0} персонажей", query.Count()); Console.WriteLine(); foreach (var item in query) { Console.WriteLine(item); } |
Целью лабораторной работы является практическое изучение возможностей постреляционного расширения языка sql для создания хранимых... | Методические указания предназначены для проведения практических занятий по дисциплине «Базы данных», для специальности ксиК | ||
Андреев Б. Ф., Гусева А. И. Методические указания к лабораторной работе «Делопроизводство» для студентов специальности «Менеджмент... | Метод исследования – моделирование базы данных в программе Microsoft Access 2013 | ||
Одобрена предметной комиссией «программного обеспечения и информационных технологий» | Фио, категория клиента, паспортные данные (свидетельства о рождении), контактные данных) | ||
Спроектировать реляционную базу данных «Магазин дисков для детей «Childs Dream»». Бд обеспечивает выполнение следующих запросов | Лабораторная работа №1 «Организация хранения данных в субд ms access» | ||
Управление проектами с помощью Microsoft Project: Методические указания к лабораторной работе по дисциплине «Основы организационного... | Информация базы данных служит основой для составления отчетов, паспорта архива, сведений для фондовых каталогов, может быть использована... |
Поиск Главная страница   Заполнение бланков   Бланки   Договоры   Документы    |