Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 914

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
вопрос по xml
использовал XML Data Binding

мне нужно, чтобы при сохранении в файл, если он существует, обновлялись лишь нужные поля в файле, если такие уже есть,

написал ниже приведенный код, но проблема в том, что при добавлении новых строк увеличивается размер XMLCollection, который просматривается заново каждый раз. естественно, размер коллекции больше, чем сохраненных элементов и выскакивает ошибка.

Подскажите, как грамотнее найти уже сущестующие в файле поля и обновить их?

Приложение:
  1. var XMLDoc : TXMLDocument;
  2. var XMLCollection: IXMLCollectionType;
  3. var XMLItem : IXMLItemType;
  4. var XMLStationType: IXMLStationType;
  5.  
  6. var item : TDataItem;
  7. var I: Integer;
  8. var findFile: Boolean;
  9. var findItem: Boolean;
  10. begin
  11. if ( CollectionPath = '' )
  12. then Exit;
  13.  
  14. XMLDoc := TXMLDocument.Create(nil);
  15. XMLDoc.Options := XMLDoc.Options + [ doNodeAutoIndent ];
  16.  
  17. findFile := False;
  18. if ( FileExists(CollectionPath) )
  19. then begin
  20. XMLDoc.LoadFromFile(CollectionPath);
  21. findFile := True;
  22. end;
  23.  
  24. XMLCollection := TXmlFile.GetCollection(XMLDoc);
  25. XMLCollection.Attributes['Collection'] := TDataFormat.getCollectionName(CollectionPath);
  26.  
  27. for item in Self
  28. do begin
  29. findItem := False;
  30.  
  31. for I := 0 to XMLCollection.Count - 1
  32. do begin
  33. if ( item.Name = XMLCollection[ I ].Title )
  34. then begin
  35. findItem := True;
  36. Break;
  37. end;
  38. end;
  39.  
  40. if findItem
  41. then begin
  42. XMLItem := XMLCollection.Item[ I ];
  43. end
  44. else begin
  45. XMLItem := XMLCollection.Add();
  46.  
  47. XMLItem.Title := item.Name;
  48. end;
  49.  
  50.  
  51. if IsFact
  52. then XMLStationType := XMLItem.FactStation
  53. else XMLStationType := XMLItem.PlanStation;
  54.  
  55. XMLStationType.Value := item.Value;
  56.  
  57. end;
  58.  
  59. TXmlFile.SaveCollection(XMLDoc, CollectionPath);
  60.  
  61. XMLCollection := nil;
  62.  


Aндрей Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Aндрей (статус: 1-ый класс)
Вопрос отправлен: 15 июня 2009, 10:29
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 15 июня 2009, 15:21; участников в обсуждении: 1.
Aндрей

Aндрей (статус: 1-ый класс), 15 июня 2009, 15:21 [#1]:

почему при добавлении XMLItem := XMLCollection.Add();
размерность XMLCollection.Count увеличивается не на единицу, а на некоторое число (иногда 3, иногда 21, ..)??

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.03 сек.