Четене на XML чрез LINQ и C #

Статията дава отговори на следните въпроси:

  • Как да използвам Linq в C #?
  • Как да четем данни от xml с помощта на c # ling в xml?
  • Как да получите достъп до атрибути, дъщерни и родителски елементи в xml?

Доста често разработчиците са изправени пред задачата да интегрират приложения, базирани на xml формат.

Примерът обработва xml файл с доста сложна структура, когато информацията за елементи от различни нива на влагане е значителна.

В този случай информацията се чете от възлите Point и техните родителски възли Element. В този случай във всеки възел на Елемент се поставя по един Точков възел. Качеството на xml структурата не е безспорно, но ви позволява ясно да демонстрирате възможностите на технологията Linq.

Пример за структурата на прочетения xml файл:

За да прочетете този файл, в Visual Studio 2010 създайте нов проект на Windows Forms Application в C #.

Нека поставим следните елементи на интерфейса във формуляра:

  • текстово поле за показване на името на файла (TextBox: textBox1);
  • бутон за отваряне на диалоговия прозорец за избор на файл (button1);
  • бутон за стартиране на процеса на четене на файл (button2);
  • лента за напредък при четене на файлове (ProgressBar: pb1);
  • текстова област за показване на информация, прочетена от xml файла (RichTextBox: rtb1).

Добавете пространството от имена към Solution Explorer в раздела Референции: System.Xml.Linq.

Нека разгледаме по-отблизо основната процедура за зареждане на данни XmlLoad () .

Първо се създава обект от класа XElement, който се използва за четене на xml документа.

След това се формира Linq заявка за прочетените данни. Заявката се отнася до под-елементи на xml документа с име Point. На изхода на заявката се формира колекция ChildList, достъпна за последващо обръщане в цикъл.

Следващата важна част от кода е цикълът, който се итерира над елементите от ChildList. Тези елементи, както вече знаем, са възлите на xml документа Point. Достъпът до атрибутите на всеки елемент е достъпен чрез свойството Attribute, а достъпът до родителските елементи чрез свойството Parent .

За да оцените производителността, файл от

3000 реда по 253Kb. Времето за зареждане на информация беше около 1 секунда.

По този начин технологията Linq предоставя на разработчика ефикасен и удобен инструмент за манипулиране на xml данни, като на практика елиминира използването на множество цикли.