C# для профессионалов. Том II | страница 18



> 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, чтобы можно было видеть различие. Остальная часть кода является такой же, как и в предыдущем примере, и работает точно так же. Вот файл