Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как с помощью XmlTextReader перейти к... ...следующему sibling-элементу 
:(
    Опции темы
CyraxZ
Дата 18.1.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



У объекта класса XmlTextReader есть метод ReadToNextSibling(string), здесь нужно указать имя sibling-элемента, к которому нужно перейти.
Мне нужно перейти к следующемуsibling-элементу (какое-бы имя он не имел), не заходя внутрь текущего элемента...
Можно ли это сделать с помощью XmlReader'ов (т.е. используя SAX-интерфейс) или без DOM-модели не обойтись ?

PM MAIL   Вверх
mr.DUDA
Дата 18.1.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ИМХО, нет.
Последовательный читатель не может пропустить ни одного элемента XML-документа.


--------------------
user posted image
PM MAIL WWW   Вверх
CyraxZ
Дата 19.1.2007, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Вопрос не верно понят !!!
Пусть методы последовательно читают все элементы, главное, чтобы метод вернул объект XmlReader, указывающий на следующий sibling-элемент (относительно текущего элемента).

Пример:

<elem_1>
</elem_1>

<elem_2>
  <elem_2>
  </elem_2>
</elem_2>

<elem_3>
</elem_3>

Текущая позиция - внешний <elem_2>. Мне нужно получить XmlReader, указывающий на <elem_3>. Имя элемента <elem_3> неизвестно. Известно лишь, что он является следующим братом для внешнего <elem_>2

Для использования метода ReadToNextSibling(string) нужно знать имя брата, в данном случае имя брата неизвестно.
А метода ReadToNextSibling() нет...
PM MAIL   Вверх
CyraxZ
Дата 21.1.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Складывается впечатление, что с XmlReader'ами никто не работал...
Мне всего-навсего нужно перейти на элемент-брата, т.е. что-то вроде ReadToNextSibling, но без указания имени этого брата...

Если здраво рассуждать, то в первую очередь должен был быть реализован метод ReadToNextSibling(), а уже потом - ReadToNextSibling(string)...
PM MAIL   Вверх
mr.DUDA
Дата 21.1.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Что реализовано в FCL, то реализовано. Если нельзя быстро перейти к следующему сиблингу (без зачитки всего документа), значит нельзя. Хотя, кажется мне, слабовато вы копали в мсдн - такая функциональность просто обязана присутствовать  smile ...


--------------------
user posted image
PM MAIL WWW   Вверх
CyraxZ
Дата 22.1.2007, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Всё, нашёл - Skip() - пропускает все дочерние узлы.
Собственно, GoToNextSibling() и есть...
PM MAIL   Вверх
CyraxZ
Дата 24.1.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Поправляюсь: похож на GoToNextSibling(), когда указатель находится на узле-элементе (в терминах System.Xml).
Только плохо, что при отсутствии sibling-элемента, когда Skip() перемещает указатель на узел-элемент уровня выше, чем имеют перебираемые узлы-элементы (с внутреннего <elem_2> Skip() перемещает нас на <elem_3>), приходится проверять Depth, т.к. Skip() возвращает void...

Гораздо удобнее было бы, если (наряду со Skip'ом) был бы реализован метод GoToNextSibling без параметров, возвращающий false, если следующего брата нет...
Собственно, из таких соображений смею заявить, что это очередная недоработка C#, а вернее классов из System.Xml...
PM MAIL   Вверх
Naum
Дата 25.1.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



 smile Ну начнем с того, что в 1.1 Framework вообще нет метода GoToNextSibling() (имеется в ввиду метод GoToNextSibling(string)) smile. А вообще (это только мое личное мнение) мне все чаще кажется, что многие недоработки  мелкомягких не случайные. Во-первых, можно быстрее выпустить текущую версию продукта. Во-вторых, будет легче продавать следующую версию продукта, в которой эти недоработки будут исправлены.

Это сообщение отредактировал(а) Naum - 25.1.2007, 11:09


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
CyraxZ
Дата 25.1.2007, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



В Framework 2.0 тоже нет метода GoToNextSibling()...
PM MAIL   Вверх
mr.DUDA
Дата 25.1.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232




M
mr.DUDA
Ругать мелкомягких давайте будем во флеймовом разделе, или добро пожаловать в Религиозные войны



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0820 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.