![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Dom |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Есть xml-файл, следующего содержания
Написал функцию DefineISPNames для извлечения значений нод 'Name' в StringList. Работает отлично.
После создаю новую ноду <ISP> и ее детей и добавляю ее в начало списка. Затем снова вызываю DefineISPNames. Но в этот раз она считывает только одну первую ноду и на второй ноде (i =1) выдает ошибку в строке 20 Result.Add(Node.ChildNodes[i].ChildNodes['Name'].NodeValue) Ошибка вот какая - Project wsnake.exe raised exception class EOleException with message 'This operation can not be performed with a Node of type PCDATA'. Process stopped. Use Step or Run to continue. Что это за тип ноды PCDATA? Что-то ничего не могу найти про это ни в хелпах ни в инете. Кстати, если после добавления новой ноды <ISP> сохранить xml-файл, то в нем сохраняются все ноды, и добавленная и старые, и все на своих местах. Т.е. структура документа правильная. Надеюсь на вашу помощь. Это сообщение отредактировал(а) Dom - 22.7.2007, 11:46 |
||||
|
|||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Так может ты неправильно её создаешь (ноду). Прогони построчно через debuger и посмотри как изменяется твой документ после добавления в него новой ноды. Именно через debuger, а не сохраняя документ. Кстати, а если сохраненный документ с новой нодой, попытаться прогнать твоей функцией, тоже вылетит такая же ошибка на том же месте? PCDATA - анализируемые символьные данные или данные, которые обычно отображаются в браузере. P.s.: Раз уж приводишь код, так приводи весь, чтобы можно было самому погонять программу Это сообщение отредактировал(а) ALeXandrK - 26.7.2007, 18:11 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Нет, если сохраненный документ снова открыть и считывать сожержимое нод этой функцией, то ошибки не возникает, и все ноды в т.ч. и новая отображаются правильно в создаваемом списке. Даже был такой топорный вариант - пересохранять файл, каждый раз после добавления ноды. Но рука до сих пор не поднялась на подобное. С debuger'ом попробую разобраться, раньше с ним не работал. Но спасибо за подсказку. Код сейчас приведу. У меня подозрение на несоместимость данных, т.е. я пытаюсь загнать в стринг содержимое ноды, а там как-будто не строка содержится. Может какое-то преобразование данных нужно... |
|||
|
||||
| ALeXandrK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Самое простое, чтобы проверить, это перевести все в тип String и сохранять и читать его как String. Если это не поможет, значит ошибка не в типе. Нет... тут точно нужно debugerом гнать.
Тем более нельзя упускать такой шанс научиться им пользоваться - это все-равно рано или поздно придется делать. А сложного там ничего нет... так что дерзай P.s.: Если уж с нодами разобрался, то дебагер - это плёвое дело Это сообщение отредактировал(а) ALeXandrK - 26.7.2007, 19:32 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
||||
|
|||||
| Dom |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Вот собственно все необходимые компоненты. Надеюсь комментарии помогут разобраться в деталях. Добавлено через 1 минуту и 4 секунды
Уже пробовал. Действительно ошибка не в типе. Добавлено через 7 минут и 10 секунд
Я не совсем уж новичок в программировании. Но вот с дебагером еще не сталкивался. Займусь. А с нодами разобраться несложно было. Тем более тут на форуме полно дельных советов есть и толковых кусочков кода. Это я решил для нашего хаба по-быстрому написать прогу для редактирования всех настроек, чтобы не руками лазить каждый раз. Однако процесс затянулся. |
||||||
|
|||||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
А что за тип такой TAddNewISPForm?
Я понимаю, что это форма, а в чём её задача? Это сообщение отредактировал(а) ALeXandrK - 26.7.2007, 20:03 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Dom |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Не совсем верный код запостил для процедуры AddNewISPNodeToXML
Там надо добавить в начало строку
Более точная процедура бцдет выглядеть так.
Сорри. Надеюсь это не фатальная ошибка. И так ясно что присваиваются значения полей Edit. Добавлено через 1 минуту и 28 секунд AddNewISPForm это форма, на которой расположены Edit'ы и CheckBox'ы, значения которых и надо добавить в новую ноду |
||||
|
|||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Для полного счастья прикрепи свой xml файлик
Это сообщение отредактировал(а) ALeXandrK - 26.7.2007, 20:15 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Легко. Только не очень удивляйся всем полям в файле. Просто сейчас я сократил для простоты экспериментов процедуру добавления и отключил добавление всех дочерних нод, оставил только несколько. Присоединённый файл ( Кол-во скачиваний: 3 )
od.rar 0,44 Kb |
|||
|
||||
| ALeXandrK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Добавление проверил. Все верно... переходим на функцию DefineISPNames.
Странно, но
При открытии это цикл выполняется дважды (у меня две ноды). Т.е. всё верно, но
Показывает, что в списке только один элемент. Ерунда какая-то Это сообщение отредактировал(а) ALeXandrK - 26.7.2007, 21:00 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
||||
|
|||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Стоп. А куда ты последний цикл вставлял?
Я выводил значения ISPNameList в ListBox вот таким образом
Добавлено через 2 минуты и 41 секунду На строки 6 и 7 не обращай внимания. Это я добавляю первым элементом строку с надписью All в один из листбоксов. |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Лохонусля... там все тоже ок
-------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Учусь пока обращатсья с дебаггером...
Кстати у меня Делфи 7. Уже не знаю на что и думать. |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Из-за этих строк и происходит билиберда, если они очень нужны, то ищи что-то в эту тему... видимо открытый файл нужно обновлять или что-то в этом роде, т.к. после вставки новых нод XML вообще пуст (это в памяти - можешь убедиться через дебагер Это сообщение отредактировал(а) ALeXandrK - 26.7.2007, 21:42 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 3 Всего: 4 |
Шаман!
Благодарю за помощь! Что-нибудь уже дальше придумаем. Но учиться дебагингу все равно надо. Это как - купишь рыбу, будешь сыт день. Научишься ловить... К сожалению репутацию добавить не могу. Поэтому еще раз поблагодярю за то, что помог разобраться. Это сообщение отредактировал(а) Dom - 26.7.2007, 21:53 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |