Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];
ВнизТип Ixmlnode и запись его в файл Найти похожие ветки
← →
D@nger (2008-10-16 07:57) [0]Здравствуйте! Пишу программу для обработки xml файлов. Xml файлы подгружаю в программу списком и записываю XMLDocument.DocumentElement в переменную Ixmlnode и работаю уже с ней чтобы не зависеть от расположения загружаемого xml файла. Все работает нормально, но теперь этот массив из переменных типа Ixmlnode необходимо сохранить в файл, чтобы потом открыть и продолжить с ними работу, добавлять или удалять файлы из этого массива, но сохранить файл не получается из за переменной ixmlnode. Приведу код сохранения в файл:
type Tfterrs=packed record
tal2count:Integer;
checked:boolean;
name,count,date_create, size:string[255];
xmlnode:Ixmlnode;
end;
var table:array of Tfterrs;
function TFmain.savetable(path:string):boolean;
var i,r,k,j:integer;
f:file of Tfterrs;
str_table:Tfterrs;
begin
result:=true;
try
assignfile(f,path);
rewrite(f);
r:=length(table)-1;
for i:=0 to r do
begin
seek(f,i);
str_table.tal2count:=r;
str_table.name:=table[i].name;
str_table.count:=table[i].count;
str_table.date_create:=table[i].date_create;
str_table.size:=table[i].size;
str_table.xmlnode:=table[i].xmlnode;
write(f,str_table);
end;
except
result:=false;
end;
closefile(f);
end;
в таком виде код вообще не запускается, ругается что Tfterrs нуждается в финализации, что нельзя создавать типизированный файл где присутствут переменная типа Ixmlnode.
Тогда я решил в типе Tfrerrs заменить переменную ixmlnode на Tstream и записывать переменную ixmlnode из массива в поток и сохранить его в файле, а при открытии файла обратно переводить Tstream в Ixmlnode. Но так как у меня нет опыта работы с поточными переменными ничего у меня не получилось... делал так:
*****блин... извините за длинный вопрос ...********
str_table.xmlstream:=Tmemorystream.Create;
xmldocument1.DocumentElement:=table[i].nodexml;
xmldocument1.SaveToStream(str_table.xmlstream);
write(f,str_table);
Причем я проверил .. в переменную str_table.xmlstream записываются данные, но в файл она не попадает.... Подскажите пожалуста как быть...
← →
Palladin © (2008-10-16 08:43) [1]как ты думаешь, что такое "поточная переменная"?
← →
D@nger (2008-10-16 08:52) [2]Palladin © (16.10.08 08:43) [1]
как ты думаешь, что такое "поточная переменная"?
я читал что поточную переменную нужно воспринимать как файл в памяти ...
← →
Palladin © (2008-10-16 09:12) [3]Я не спрашиваю как ее воспринимать переменную, я спрашиваю, что такое "поточная переменная". Вообще говоря, такого понятия и не существует. Это все больные фантазии. Есть понятие класса. Есть понятие объекта - экземпляра класса. Твоя "поточная переменная" никакой, нафик, не "файл в памяти", это объект класса TStream, а точнее, одного из его наследников. Что такое идентификатор объекта? Это всего лишь 4 байта, LongWord - содержащие адрес в памяти по которому находится созданный экземпляр класса. Как видишь, пока никакими "файлами в памяти" не пахнет. Как ты думаешь, что запишется в файл если указать в Record переменную типа TStream? А вот эти, нафик (при последующем чтении) не нужные, 4 байта. С другой стороны, теперь уже перейдем к понятию "файл в памяти", у нас есть некоторое количество данных, размер которых не фиксирован. (Заметь, при работе с типизированными файлами, требуется Record, а размер Record <b?всегда фиксирован по определению, о чем ты должен был знать изучая, хотя бы, основы Паскаля). Следовательно, подход с использованием типизированных файлов, абсолютно ошибочен. И использовать нужно нетипизированные файлы, или те же потоки в виде TFileStream.
← →
Поросенок Винни-Пух © (2008-10-16 09:27) [4]Извращнулся так извращнулся.
В рекорд совать хмл структуру.
Наоборот не пробовал?
← →
Поросенок Винни-Пух © (2008-10-16 09:58) [5]str_table.xmlstream:=Tmemorystream.Create;
table[i].nodexml.OwnerDocument.SaveToStream(...);
← →
D@nger (2008-10-16 10:13) [6]
> Поросенок Винни-Пух © (16.10.08 09:58) [5]
>
> str_table.xmlstream:=Tmemorystream.Create;
> table[i].nodexml.OwnerDocument.SaveToStream(...);
>
спасибо ... попробую
← →
Плохиш © (2008-10-16 11:52) [7]
> D@nger (16.10.08 07:57)
> Xml файлы подгружаю в программу списком и записываю XMLDocument.
> DocumentElement в переменную Ixmlnode и работаю уже с ней
> чтобы не зависеть от расположения загружаемого xml файла.
Хорошая трава...
> необходимо сохранить в файлXMLDocument.SaveToFile
← →
D@nger (2008-10-16 12:22) [8]
>
> > необходимо сохранить в файл
>
> XMLDocument.SaveToFile
это сохранить только один xml файл , а у меня их несколько...я же написал список ... и к тому же вместе с файлом мне необходимо сохранить еще кое какие данные строкового типа ....
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c