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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML as Registry, Использование ключей. 
:(
    Опции темы
iddqd
Дата 10.10.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Необходимо работать с XML,  как с реестром.
Например функция 
Код

WriteString('Main\Moto\Test', 'hello moto');

Должна записать в файл XML следующий код:
Код

<Main>
 <Moto>
  <Test>
   hello moto
  </Test>
 </Moto>
</Main>

Причём если какие-либо записи уже существуют, то просто добавить.
И такой же вопрос с чтением. Помогите, пожалуйста, бьюсь с этим уже очень давно.

PS. Есесна с парсингом строки типа: Main\Moto\Test разберусь сам. Мне надо толкьо запись и чтение в XML.


--------------------
PM MAIL   Вверх
_hunter
Дата 10.10.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



дык в чем проблема? темы парсинга/записи XML не раз поднимались -- ищи на форуме...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
iddqd
Дата 10.10.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Читал я форум и довольно внимательно. А Вы прочитайте, пожалуйста, моё сообщение внимательно.
Этот вопрос уже задавался, но решён так и не был.
По отдельности как записать, как прочитать - я знаю. Мне нужно теперь в совокупности решить описанную выше проблему.


--------------------
PM MAIL   Вверх
_hunter
Дата 10.10.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



вышеописанной проблемы в свете последнего поста не вижу:
если знаеш как читать -- знаеш как проверить есть ли запись.

если под
Цитата(iddqd @  10.10.2006,  11:46 Найти цитируемый пост)
Этот вопрос уже задавался, но решён так и не был.

ты понимаеш "код я просил но никто мне его не написал" -- ты ошибся разделом: это нужно в "Работа" постить...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alexeis
Дата 10.10.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(_hunter @  10.10.2006,  12:43 Найти цитируемый пост)
нужно в "Работа" постить... 

Или в "центр помощи"


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
iddqd
Дата 13.10.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Начал я писать, но столкнулся с одной проблемой.
Код такой:
Код

procedure Write(Path, Key, Value: string);
var
  N, P, K, root: IXMLNode;
  ts: TStringList;
  i: integer;
begin
  ts := TStringList.Create;
  ts.Delimiter := '/';
  ts.DelimitedText := Path;
  root := XML.DocumentElement;
  if root.ChildNodes.IndexOf(ts[0]) < 0 then
    N := root.AddChild(ts[0]) else
    N := root.ChildNodes.FindNode(ts[0]);
  for I := 1 to ts.Count - 1 do begin
    if N.ChildNodes.IndexOf(ts[i]) < 0 then
      P := N.AddChild(ts[i]) else P := N.ChildNodes.FindNode(ts[i]);
  end;
  K := P.AddChild(Key);
  K.Text := Value;
  ts.Free;
end;


Вызываю, например, так:
Код

Write('Main/Hello/Moto/Love', 'Test2', '45645646');


Всё записывается, но есть один недостаток. Пишет так:
Код

  <Main>
    <Hello/>
    <Moto/>
    <Love>
      <Test2>45645646</Test2>
    </Love>
  </Main>


А я хочу, чтоб писало вот так:
Код

<Main>
  <Hello>
    <Moto>
      <Love>
        <Test2>45645646</Test2>
      </Love>
    </Hello>
  </Moto/>
</Main>


Т.е нет закрывающего тега для тегов без параметров. И теги без параметров не выстраиваются "лесенкой".
Подскажите, пожалуйста, как быть?


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


Опытный
**


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

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



Я так думаю, что функция чтения, сделанная по похожему алгоритму не работает оп той же причине :\


--------------------
PM MAIL   Вверх
_hunter
Дата 16.10.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата(iddqd @  16.10.2006,  09:15 Найти цитируемый пост)
Я так думаю, что функция чтения, сделанная по похожему алгоритму не работает оп той же причине

очень даже вероятно


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
drkot
Дата 16.10.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



У тебя в этом цикле бока
Код

 for I := 1 to ts.Count - 1 do begin
    if N.ChildNodes.IndexOf(ts[i]) < 0 then
      P := N.AddChild(ts[i]) else P := N.ChildNodes.FindNode(ts[i]);
  end;


Получается что страиш лесенку постоянно от корневого элемента.
Вот и получаются пустые теги.
Делай переприсвоение. И посмотри работу цикла в дебагере.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Akella
Дата 16.10.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



заранее прошу прощения у модераторов этой темы форума.
 smile 
Цитата(_hunter @  10.10.2006,  12:43 Найти цитируемый пост)
если под
Цитата(iddqd @  10.10.2006,  11:46 Найти цитируемый пост)
Этот вопрос уже задавался, но решён так и не был.

ты понимаеш "код я просил но никто мне его не написал" -- ты ошибся разделом: это нужно в "Работа" постить... 


iddqd, ты же пойми, что программист по натуре человек зачастую ленивый, и никто на формуме не сделает за тебя поный код, ну хотя бы потому что вопрос у тебя частный. Допустим, если бы ты задал вопрос по поводу поиска или фильтраци в БД, или ипорта/экспорта из Excel`я, то думаю, что тебе привели бы код в пример, по крайнеё мере я бы так сделал, потому что:
1. у меня есть этот код
2. я не очень жадный.

а ты тут пришёл и давайте все ему код быстро, а то всем минусы smile 

много вопросов на форуме задаётся и не все решаются, так что всем минусы ставить? smile

Добавлено @ 15:09 
код тебе нужен не из пяти строчек ведь. А тебе нужно продумать и написать целую логику работы твоих процедур.
А если для тебя напишут и допустят ошибку... опять минус...

Это сообщение отредактировал(а) Akella - 16.10.2006, 15:06
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.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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