C# для профессионалов. Том II | страница 6
>XmlWriter
:>XmlTextReader
и >XmlTextWriter
работают либо с объектами на основе потока, либо с объектами на основе >TextReader
или >TextWriter
. >XmlNodeReader
использует >XmlNode
вместо потока в качестве своего источника. >XmlValidatingReader
добавляет DTD и проверку схем и поэтому предлагает проверку данных. Мы рассмотрим это подробнее позже в этой главе.
XmlTextReader
>XmlTextReader
похож на SAX. Одно из различий заключается в том, что SAX является моделью типа рассылки (push), т.е. посылает данные приложению и разработчик должен быть готов принять их, a >XmlTextReader
применяет модель запроса (pull), где данные посылаются приложению, которое их запрашивает. Это предоставляет более простую и интуитивно понятную модель для программирования. Другое преимущество состоит в том, что модель запроса может быть избирательной в отношении данных, посылаемых приложению. Если нужны не все данные, то их не нужно обрабатывать. В модели рассылки все данные XML должны быть обработаны приложением, нужны они ему или нет.
Возьмем простой пример считывания данных XML, и затем более внимательно рассмотрим класс >XmlTextReader
. Код можно найти в папке >XmlReaderSample1
. Можно заменить метод >button1_Click
в предыдущем примере на следующий код. Эту версию данного кода можно найти в папке >SampleBase2
загруженного архива кода. Не забудьте изменить:
>using MSXML2;
на
>using System.Xml;
Мы должны это сделать, поскольку используем теперь не MSXML 3.0, а пространство имен >System.Xml
. Нужно также удалить метод >listBox1_SelectedIndexChanged
, так как он включает в себя некоторые неподдерживаемые методы и строку:
>private DOMDocument30 doc;
>protected void button1_Click(object sender, System.EventArgs e) {
> // Измените этот путь доступа, чтобы найти books.xml
> string fileName = "..\\..\\..\\books.xml";
> // Создать новый объект TextReader
> XmlTextReader tr = new XmlTextReader(fileName);
> // Прочитать узел за раз
> while(tr.Read()) {
> if (tr.NodeType == XmlNodeType.Text) listBox1.Items.Add(tr.Value);
> }
>}
Это >XmlTextReader
в простейшей форме. Сначала создается строковый объект >fileName
с именем файла XML. Затем создается новый объект >XmlTextReader
, передавая в качестве параметра строку >fileName.XmlTextReader
в настоящее время имеет 13 различных перегружаемых конструкторов, которые получают различные комбинации строк (имен файлов и URL), потоков и таблиц имен. После инициализации объекта >XmlTextReader
ни один узел не выбран. Это единственный момент, когда узел не является текущим. Когда мы начинаем цикл