///
/// Главная точка входа для приложения.
///
[STAThread]
static void Main {
Application.Run(new Form1);
}
Мы хотим взять номер ISBN из listbox
XPath
, найти узел книги, который ему соответствует, и вывести текст узла (заглавие книги и цену) в MessageBox
. Язык пути доступа XML (XPath) является нотацией XML, которая может использоваться для запроса и фильтрации текста в документе XML. Рассмотрим XPath в .NET позже в этой главе. Вот код обработчика событий для выбора записи в окне списка: protected void listBox1_SelectedIndexChanged (object sender, System.EventArgs e){
string srch=listBox1.SelectedItem.ToString;
IXMLDOMNode nd=doc.selectSingleNode("bookstore/book[@ISBN='" + srch + "']");
MessageBox.Show(nd.text);
}
Теперь мы имеем обработчик события нажатия кнопки. Сначала мы загружаем файл books.xml
bin/debug
или bin/release
, необходимо исправить соответствующим образом путь доступа: protected void button1_Click(object sender, System.EventArgs e) {
doc=new DOMDocument30;
doc.load("..\\..\\..\\books.xml")
Следующие строки объявляют, что узлы являются nodeList
IXMLDOMNodeList nodes;
nodes = doc.selectNodes("bookstore/book");
IXMLDOMNode node=nodes.nextNode;
Мы просматриваем узлы в цикле и добавляем текстовое значение атрибута ISBN в listBox1
while(node!=null) {
listBox1.Items.Add(node.attributes.getNamedItem("ISBN").text);
node=nodes.nextNode;
}
}
}
}
Вот как выглядит пример во время выполнения:
Это изображение появляется после того, как была нажата кнопка button1 и загрузился listBox1 с номерами ISBN книг. После выбора номера ISBN будет выведено следующее:
System.Xml
Пространство имен System.Xml
System.Xml
. Пространство имен System.Xml
предлагает большую гибкость и легче расширяется.Этот файл XML будет использоваться в примерах этой главы. Код, который только что был рассмотрен, лежит в основе нескольких примеров. В большинстве других будет показан только код, имеющий отношение к делу, и не будет повторяться то, что уже было показано.
Чтение и запись XML
Теперь посмотрим, что позволяет делать платформа .NET. Если раньше вы работали с SAX, то XmlReader
XmlWriter
вам будут знакомы. Классы на основе XmlReader
предоставляют быстрый курсор только для чтения вперед, который создает поток данных XML для обработки. Так как это потоковая модель, то требования к памяти не очень большие. Однако в ней отсутствует навигационная гибкость и средства чтения/записи, присущие модели DOM. Классы на основе XmlWriter
будут создавать документ XML, который соответствует рекомендациям по пространствам имен XML 1.0 консорциума W3C.XmlReader
XmlWriter
являются абстрактными классами. Рисунок ниже показывает, какие классы являются производными от XmlReader
и XmlWriter
:XmlTextReader
XmlTextWriter
работают либо с объектами на основе потока, либо с объектами на основе TextReader
или TextWriter
. XmlNodeReader
использует XmlNode
вместо потока в качестве своего источника. XmlValidatingReader
добавляет DTD и проверку схем и поэтому предлагает проверку данных. Мы рассмотрим это подробнее позже в этой главе.XmlTextReader
XmlTextReader
XmlTextReader
применяет модель запроса (pull), где данные посылаются приложению, которое их запрашивает. Это предоставляет более простую и интуитивно понятную модель для программирования. Другое преимущество состоит в том, что модель запроса может быть избирательной в отношении данных, посылаемых приложению. Если нужны не все данные, то их не нужно обрабатывать. В модели рассылки все данные XML должны быть обработаны приложением, нужны они ему или нет.