Ватсон Карли
Шрифт:
// создать и задать атрибуты элемента "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
.