Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удалить ChildNode 
V
    Опции темы
golfV
Дата 19.12.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброго времени суток!

есть такая проблемка. Надо удалить ChildNode делаю таким способом
Код

for i:=0 to XMLDoc.DocumentElement.ChildNodes.Count -1 do
       begin
 XMLCri.DocumentElement.ChildNodes.Delete('MP');

 XMLCri.SaveToFile('c:\crit.xml');
 end;

он удаляет все ChildNode <MP> а вопрос состоит в том что как удалить ChildNode  name которого начанается на 11 Выгладит он вот так
Код

<MP type="T" name=" 11.0.1">
<MP type="T" name=" 11.0.2">
 
подскажите если кто знает?
Зарание большое спасибо!!!

Это сообщение отредактировал(а) golfV - 19.12.2009, 01:36
PM MAIL   Вверх
Dom
Дата 19.12.2009, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как вариант - вести перебор всех узлов МР и проверять значение атрибута name.

При этом если проверка и удаление будет выполнятся в цикле то лучше делать так
Код

for i := XMLDoc.DocumentElement.ChildNodes.Count -1 downto 0 do

PM MAIL   Вверх
golfV
Дата 19.12.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



попробую так сделать, а вот такой вопрос как проверить что name  начинается на 11, потому что писать каждый номер будет очень неудобно так как их очень много.
PM MAIL   Вверх
Keeper89
Дата 19.12.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Код

StrToInt(Copy(name, 2, 2)) = 11

P.S. С индексами надо смотреть, непонятно где там есть пробелы.


--------------------
PM MAIL WWW   Вверх
Dom
Дата 19.12.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Или через 
Код

Pos('11', Trim(name_str)) = 0

PM MAIL   Вверх
golfV
Дата 20.12.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а можно немного подробнее как воспользоваться методом Pos или StrToInt?  пробую пробую что то неполучается, проходит без ошибок но ничего неудаляет.
PM MAIL   Вверх
Dom
Дата 20.12.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Выложи код цикла в котором идет проверка и удаление
PM MAIL   Вверх
golfV
Дата 20.12.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

for i:=0 to XMLDoc.DocumentElement.ChildNodes.Count -1 do
       begin
Name:= XMLCri.ChildNodes[0].ChildNodes[i].Attributes['name'];
if Pos('11', Name) <> 0 then
      XMLCri.DocumentElement.ChildNodes.Delete(i);
end;
XMLCri.SaveToFile('C:\crit.xml');

вот так делаю, он удаляет но только не все, первый раз запустиш удалит один нод с именем на 11, второй раз запустиш удалит еще один, почему так происходит непонимаю

Это сообщение отредактировал(а) golfV - 20.12.2009, 17:20
PM MAIL   Вверх
Dom
Дата 20.12.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А ничего что в объявлении цикла используется XMLDoc, а при проверке и удалении XMLCri? Это не разные вещи?
И пользуйся пошаговой отладкой F8, F7, смотри какие значения принимают твои переменные и сразу будет понятно что не так. Возможно что XMLDoc.DocumentElement.ChildNodes.Count равен нулю.

И еще раз повторюсь, веди поиск с конца - от последнего элемента до нулевого.
PM MAIL   Вверх
golfV
Дата 20.12.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



XMLDoc и XMLCri там одинаковое количество нодов, поэтому это некак неможет влиять
PM MAIL   Вверх
Dom
Дата 20.12.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Используется проход по одному документу, чтобы проверить и удалить что-то в другом. После удаления узла счетчик Count уменьшается на единицу например, и смещаются индексы всех остальных узлов.
Пройди пошагово этот цикл и посмотри как он перебирает узлы, какие и в какой последовательности и чему равна переменная Name на каждом шаге.
Вообще странно что AV не выскакивает.

Или вот еще возможная причина - если перед 11 есть пробел, то результат будет уже не 0. В пошаговом режиме посмотри какие значения возвращает эта функция.
PM MAIL   Вверх
golfV
Дата 21.12.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все заработало. Dom, сделал проверку  циклом как ты посоветовал
Код

for i := XMLDoc.DocumentElement.ChildNodes.Count -1 downto 0 do


сразу заработало! Большое спасибо!

Это сообщение отредактировал(а) golfV - 21.12.2009, 14:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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