выбрать? Если данные, которые желательно поместить в XML, доступны и готовы для записи, то самым подходящий будет класс XmlTextWriter. Однако, если необходимо создавать документ XML постепенно, вставляя узлы в различные места, то наиболее приемлемым будет применение XmlDocument. Вот тот же пример, который только что был рассмотрен, но вместо редактирования текущего документа мы создаем новый документ (DOMSample4):

private void button1_Click(object sender, System.EventArgs e) {

 // создать раздел объявлений

 XmlDeclaration newDoc=doc.CreateXmlDeclaration('1.0', null, null);

 doc.AppendChild(newDoc);

 // создать новый корневой элемент

 XmlElement newRoot=doc.CreateElement('newBookstore');

 doc.AppendChild(newRoot);

 // создать новый элемент 'book'

 XmlElement newBook=doc.CreateElement('book');

 // создать и задать атрибуты элемента 'book'

 newBook.SetAttribute('genre','Mystery');

 newBook.SetAttribute('publicationdate', '2001');

 newBook.SetAttribute('ISBN', '123456789');

 // создать элемент 'title'

 XmlElement newTitle=doc.CreateElement('title');

 newTitle.InnerText='Case of the Missing Cookie';

 newBook.AppendChild(newTitle);

 // создать элемент author

 XmlElement newAuthor=doc.CreateElement('author');

 newBook.AppendChild(newAuthor);

 // создать элемент name

 XmlElement newName=doc.CreateElement('name');

 newName.InnerText='C. Monster';

 newAuthor.AppendChild(newName);

 // создать элемент price

 XmlElement newPrice=doc.CreateElement('price');

 newPrice.InnerText='9.95';

 newBook.AppendChild(newPrice);

 // добавить элемент 'book' к doc

 doc.DocumentElement.AppendChild(newBook);

 // записать на диск Note новое имя файла booksEdit.xml

 XmlTextWriter tr=new XmlTextWriter('..\..\..\booksEdit.xml', null);

 tr.Formatting=Formatting.Indented; doc.WriteContentTo(tr);

 tr.Close();

 // загрузить заголовок в окно списка

 XmlNodeList nodeLst=doc.GetElementsByTagName('title');

 foreach(XmlNode node in nodeLst) listBox1.Items.Add(node.InnerText);

}

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) {

 String srch='newBookstore/book[title=''+ listBox1.SelectedItem.ToString() + '']';

 XmlNode foundNode=doc.SelectSingleNode(srch);

 if (foundNode!=null) MessageBox.Show(foundNode.InnerText);

 else MessageBox.Show('Not found');

}

Заметим, что изменились только две начальные строки. Прежде чем сделать doc.Load, внесем новые элементы:

XmlDeclaration newDoc=doc.CreateXmlDeclaration('1.0', null, null);

doc.AppendChild(newDoc);

XmlElement newRoot=doc.CreateElement('newBookstore');

doc.AppendChild(newRoot);

Сначала создается новый объект XmlDeclaration. Параметрами являются версия (в настоящее время всегда '1.0'), кодировка (null подразумевает UTF- 8) и, наконец, флаг standalone. Он может быть yes или no, но если вводится null или пустая строка, как в нашем случае, этот атрибут не будет добавляться при сохранении документа. Параметр кодировки должен задаваться строкой, которая является частью класса System.Text.Encoding, если не используется null.

Следующим создаваемым элементом станет DocumentElement. В данном случае мы называем его newBookstore, чтобы можно было видеть различие. Остальная часть кода является такой же, как и в предыдущем примере, и работает точно так же. Вот файл booksEdit.xml, создаваемый этим кодом:

<?xml version='1.0'?>

<newBookstore>

 <book genre='Mystery' publicationdate='2001' ISBN='123456789'>

  <title>Case of the Missing Cookie</title>

  <author>

   <name>C. Monster</name>

  </author>

  <price>9.95</price>

 </book>

</newBookstore>

Мы не рассмотрели всех особенностей класса XmlDocument или других классов, способствующих созданию модели DOM в .NET. Однако мы видели мощь и гибкость, которые предлагает реализация DOM в .NET. Класс XmlDocument обычно используется, когда требуется случайный доступ к документу. Используйте классы на основе XmlReader, когда желательна модель потокового типа. Помните, что гибкость XmlDocument на основе XmlNode обеспечивается более высокими требованиями к памяти, поэтому подумайте тщательно о том, какой метод предпочтительнее в конкретной ситуации.

XPath и XslTransform

Мы рассмотрим XPath и XslTransform вместе, хотя они являются отдельными пространствами имен на платформе. XPath содержится в System.Xml.XPath, a XslTransform находится в System.Xml.Xsl. Причина совместного рассмотрения состоит в том, что XPath, в частности класс XPathNavigator, предоставляет ориентированный на производительность способ выполнения XSLTransform в .NET. Для начала рассмотрим XPath, а затем его использование в классах System.Xsl.

XPath

Пространство имен XPath создается для скорости. Оно позволяет только читать документы XML без возможностей редактирования. XPath создается для поверхностного выполнения быстрых итераций и выбора в документе XML. Функциональность XPath

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×