C# для профессионалов. Том II - [4]
>ReadStartElement
, который проверяет, является ли текущий узел начальным элементом, и затем перемешает текущую позицию к следующему узлу. Если текущая позиция не является начальным элементом, то порождается исключение >XmlException
. Этот метод совпадает с вызовом метода >IsStartElement
, за которым следует метод >Read
.Методы >ReadString
и >ReadCharts
считывают текстовые данные из элемента. >ReadString
возвращает строковый объект, содержащий данные, в то время как >ReadCharts
считывает данные в заданный массив символов.
Метод >ReadElementString
аналогичен методу >ReadString
, за исключением того, что при желании можно передать в него имена элемента. Если следующий узел содержимого не является начальным тегом или, если параметр >Name
не совпадает с именем (>Name
) текущего узла, то порождается исключение. Вот пример того, как это может использоваться (код можно найти в папке >XmlReaderSample2
):
>protected void button1_Click(object sender, System.EventArgs e) {
> // Использовать файловый поток для получения данных
> FileStream fs = new FileStream("..\\..\\..\\books.xml", FileMode.Open);
> XmlTextReader tr = new XmlTextReader(fs);
> while(!tr.EOF) {
> // если встретился тип элемента, проверить и загрузить его в окно списка
> if (tr.MoveToContent()==XmlNodeType.Element && tr.Name=="title") {
> listBox1.Items.Add(tr.ReadElementString());
> } else
> //иначе двигаться дальше
> tr.Read();
> }
>}
В цикле >while
используется метод >MoveToContent
для поиска каждого узла типа >XmlNodeType.Element
с именем >title
. Если это условие не выполняется, то предложение >else
вызывает метод >Read
для перехода к следующему узлу. Если будет найден узел, соответствующий критерию, то результат работы метода >ReadElementString
добавляется в >listbox
. Таким образом мы получим заглавия книг в >listbox
. Отметим, что после успешного применения >ReadElementString
метод >Read
не вызывается. Это связано с тем, что метод >ReadElementString
обрабатывает весь >Element
и перемещается к следующему узлу.
Если удалить >&& tr.Name=="title"
из предложения >if
, то придется отслеживать исключение >XmlException
, когда оно будет порождаться. При просмотре файла данных можно заметить, что первым элементом, который найдет метод MoveToContent, является элемент >
. Как элемент он будет проходить проверку в операторе >if
. Но так как он не содержит простой текстовый тип, он вынуждает метод >ReadElementString
порождать исключение >XmlException
. Одним из способов обхода этой проблемы является размещение вызова >ReadElementString
в своей собственной функции. Назовем ее >LoadList
. >XmlTextReader
передается в нее в качестве параметра. Теперь, если вызов >ReadElementString
отказывает внутри этой функции, мы можем иметь дело с ошибкой и вернуться назад в вызывающую функцию. Вот как выглядит пример с этими изменениями (код можно найти в папке >XmlReaderSample3
):
>protected void button1_Click(object sender, System.EventArgs e) {
> // использовать файловый поток для получения данных
> FileStream fs = new FileStream("..\\..\\..\\books.xml", FileMode.Open);
> XmlTextReader tr = new XmlTextReader(fs);
> while(!tr.EOF) {
> // если встретился тип элемента, проверить и загрузить его в окно списка
> if (tr.MoveToContent() == XmlNodeType.Element) {
> LoadList(tr);
> } else
> // иначе двигаться дальше
> tr.Read();
> }
>}
>private void LoadList(XmlReader reader) {
> try {
> listBox1.Items.Add(reader.ReadElementString());
> }
> //если инициировано исключение XmlException, игнорировать его.
> catch(XmlException er){}
>}
Вот что должно появиться, когда код будет выполнен:
Это тот же результат, который был раньше. Мы видим, что существует более одного способа достичь одной и той же цели. При этом становится очевидной гибкость пространства имен >System.Xml
.
По мере чтения узлов можно заметить отсутствие каких-либо атрибутов. Это связано с тем, что атрибуты не считаются частью структуры документа. При нахождении в узле элемента мы можем проверить наличие атрибутов и получить значения атрибутов. Метод >HasAttributes
возвращает >true
, если существуют какие-либо атрибуты, иначе возвращается >false
. Свойство >AttributeCount
сообщит, сколько имеется атрибутов. Метод >GetAttribute
получает атрибут по имени или по индексу. Если желательно просмотреть все атрибуты по очереди, можно использовать методы >MoveToFirstAttribute
(перейти к первому атрибуту) и >MoveToNextAttribute
(перейти к следующему атрибуту). Вот пример просмотра атрибутов из >XmlReaderSample4
:
>protected void button1_Click(object sender, System.EventArgs e) {
> // задаем путь доступа в соответствии со структурой путей доступа
> // к данным
> string fileName = "..\\..\\..\\books.xml";
> // Создать новый объект TextReader
> XmlTextReader tr = new XmlTextReader(filename);
> // Прочитать узел за раз
> while (tr.Read()) {
> // проверить, что это элемент NodeType
> if (tr.NodeType = XmlNodeType.Element) {
> // если это — элемент, то посмотрим атрибуты
> for(int i=0; i
> listBox1.Items.Add(tr.GetAttribute(i));
> }
> }
> }
>}
На этот раз мы ищем узлы элементов. Когда такой узел найден, в цикле просматриваются все атрибуты и с помощью метода
![Графика для Windows средствами DirectDraw](/storage/book-covers/6d/6dbc78361f37e9af5b71d5019ca64570a40e0466.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Виртуальная библиотека Delphi](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Пишем драйвер Windows на ассемблере](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Как писать драйвера](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![MFC и OpenGL](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Информационная технология. Оценка программной продукции характеристики качества и руководства по их применению](/build/oblozhka.dc6e36b8.jpg)
Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»Information technology. Software product evaluation. Quality characteristics and guidelines for their use.