![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
mr.Anderson |
|
||||||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Возникла следующая проблема. Есть простой XML-файлик следующего вида:
Читать пытаюсь следующим кодом:
Но, если я попытаюсь сначала прочитать второй нод (TestNode2), а потом первый (TestNode), я получу свое исключение, что нод не найден. Я проверял, это возникает, по-видимому, потому, что указатель в ридере остается ниже нужного нода. Метод переоткрывать файл каждый раз - это как-то топорно, хоть и работает. Попробовал обойти проблему через файловый поток. Делаю так:
Казалось бы, все должно быть правильно. В первый раз нод читается нормально (TestNode2 в нашем случае). Однако, после второй попытки чтения вышележащего нода TestNode я получаю исключение времени выполнения, что читаемый файл содержит ошибку в строке 5, позиция 11. Получаю это на строчке
Вопрос: в чем проблема? Почему перенос указателя в потоке обратно не сработал, и как в данном случае следует правильно сделать? Задача вообще простая: XML-файл должен быть открыт на протяжении всего времени работы программы, и при запросе выдавать нужный нод оттуда. |
||||||||
|
|||||||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
конечно, этот же обычная потоковая модель, с указателем позиции потока и т.п.
а этот оператор не находится вне области цикла? И вообще, почему бы не использовать DOM объект XmlDocument, его метод Load и методы работы с его содержимым, основанные на XPath? Зачем такой тяжелый код? -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Находится, конечно. Мы же должны сбросить указатель после чтения всего файла, разве нет? Зачем внутри-то цикла его перемещать на начало постоянно? Он так цикл никогда и не закончит. А вообще, да, надо, наверное, XPath использовать... Попробую. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
ясно. Т.е. поток мы можем держать бесконечно долго, чем блокировать источник данных (файл)? Мда.... весьма запутанный код. Что опять же наталкивает на мысль перейти к XmlDocument. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Странное что-то...
Вылетает исключение "нод не найден". Вроде, все так написано. Документ в _doc загружен. Что не так? Почему нод не находит? Добавлено через 3 минуты и 35 секунд ЗЫ структура файла такая же, как выше описано. |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Строку XPath надо передавать методу SelectNodes -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
RWander |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 4.5.2006 Где: Russia.Udm.Izhevs k Репутация: 1 Всего: 6 |
Посоветовал бы использовать LINQ to XML, код сократится в разы
![]() -------------------- Microsoft Certified Technology Specialist - ASP.NET Applications |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
пример
да, можно и так Это сообщение отредактировал(а) tol05 - 12.12.2009, 22:26 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
LINQ использовать не могу, нужно писать на .NET 2.0 в силу некоторых обстоятельств. Разобрался, действительно, надо было просто SelectSingleNode использовать.
Всем спасибо! tol05, +1 за мысль. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |