Робота з xml засобами visual basic

Останнім часом мені багато приходить питань на тему роботи з XML і писати кожному окремо відповіді на це питання мені набридло, тому пишу відразу для всіх.
І так, в даному огляді ви довідаєтеся, як створити і прочитати XML засобами Visual Basic .NET.

СозданіеXML


Почнемо, мабуть, з простого прикладу:

'Створюємо MemoryStream, в який будемо писати XML
Dim myMemoryStream As New IO.MemoryStream
'Створюємо XmlTextWriter, вказуємо об'єкт - myMemoryStream,
'В який будемо писати XML, і кодування windows-1251
Dim myXml As New System.Xml.XmlTextWriter (myMemoryStream, _
System.Text.Encoding.GetEncoding (1251))

'Створюємо XML
myXml.WriteStartDocument ()
'Встановлюємо параметри форматування
'Xml-документа
'в даному випадку -
'System.Xml.Formatting.Indented - форматує відступи
'В дочірніх елементах відповідно до параметрів
'Настройки Indentation і IndentChar
myXml.Formatting = System.Xml.Formatting.Indented
'Довжина відступу
myXml.Indentation = 2

'Створюємо елемент
myXml.WriteStartElement ( "test")

'Створюємо елемент
myXml.WriteStartElement ( "item")
'Записуємо рядок
myXml.WriteString ( "привіт, це тест")
'Закриваємо елемент

myXml.WriteEndElement ()

'Створюємо елемент
myXml.WriteEndElement ()

'Заносимо дані в myMemoryStream
myXml.Flush ()


В результаті виконання даного коду можна отримати приблизно такий XML-файл:


В даному прикладі XML записується в MemoryStream. однак, замість MemoryStream можна використовувати будь-який інший Stream. наприклад FileStream. або ще простіше, записувати дані відразу в файл, для цього просто замість myMemoryStream в п'ятому рядку вкажіть шлях до файлу:

Dim myXml As New System.Xml.XmlTextWriter ( "C: myxml.xml". _
System.Text.Encoding.GetEncoding (1251))


ЧтеніеXML

Dim myXml As New System.Xml.XPath.XPathDocument (myMemoryStream)
Dim sItem As String = ""
'Читаємо значення елемента item
sItem = _
yXml.CreateNavigator.SelectSingleNode ( "/ test / item") .Value
Dim sName As String = ""
Dim sBirthday As String = ""
'Читаємо значення name елемента data
sName = _
myXml.CreateNavigator.SelectSingleNode ( "/ test / data / @ name") .Value
'Читаємо значення birthday елемента data
sName = _
myXml.CreateNavigator.SelectSingleNode ( "/ test / data / @ birthday") .Value


В даному випадку, замість myMemoryStream в першому рядку можна вказати безпосередньо шлях до XML-файлу.
Метод SelectSingleNode отримує значення першого елемента зазначеного в XPath. Якщо викликати цей метод ще раз, то він поверне значення наступного елемента, і т.д.

Схожі статті