C# для профессионалов. Том II | страница 7
>Read
переместит нас в первый узел документа. Обычно это бывает узел Declaration XML. В этом примере при переходе к каждому узлу >tr.NodeType
сравнивается с перечислением >XmlNodeType
, и когда встречается текстовый узел, значение текста добавляется в >listbox
. Вот экран после того, как было загружено окно списка:Существует несколько способов перемещения по документу. Как мы только что видели, >Read
перемещает нас к следующему узлу. Затем можно проверить, имеет ли узел значение (>HasValue
) или, как мы скоро увидим, имеет ли узел атрибуты (>HasAttributes
). Существует метод >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