ReadXMLFile и поток

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

ReadXMLFile и поток

Сообщение BORNDEAD » 06.02.2009 17:42:31

Судя по документации работает только с файлами и потоками.
Попробовал с потоком, при записи строки приписываются в начало 4 байта :!: неизвестно (по крайней мере мне) откуда
Есть ли другой способ считать из строки в xml документ?

З.Ы. lazarus 0.9.26, FPC 2.2.2, архитектура х64
BORNDEAD
незнакомец
 
Сообщения: 2
Зарегистрирован: 06.02.2009 17:15:02

Re: ReadXMLFile и поток

Сообщение Mr.Smart » 06.02.2009 18:18:23

Посмотрите про реализацию функции Stream.WriteAnsiString и всё поймёте.
Первые 4 байта это размер строки!

Добавлено спустя 1 минуту 5 секунд:
Делайте запись посредством Strem.WriteBuffer
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ReadXMLFile и поток

Сообщение Sergei I. Gorelkin » 06.02.2009 18:36:27

Для чтения из строки нужно создать поверх нее TStringStream и потом из него читать:

Код: Выделить всё
Var
  S : TStringStream;
  XML : TXMLDocument;

begin
  S:= TStringStream.Create(MyXMLString);
  Try
    S.Position:=0;
    ReadXMLFile(XML,S); // Чтение документа целиком
    // или:
    ReadXMLFragment(AParentNode,S); // Чтение части документа
  Finally
    S.Free;
  end;
end;
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: ReadXMLFile и поток

Сообщение AltRunner » 18.03.2009 18:35:43

Здравствуйте!
Пробовал преобразовать строку в XML документ как описано выше но Lazarus выдет ошибку:

unit1.pas(61,32) Error: Call by var for arg no. 2 has to match exactly: Got "TStringStream" expected "TStream"

Не компилируется нивкакую. Может надо какой модуль подключить?

модули:
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, WInInet, DOM, XMLRead;


Помогите пожалуйста.
AltRunner
незнакомец
 
Сообщения: 4
Зарегистрирован: 18.03.2009 18:25:53

Re: ReadXMLFile и поток

Сообщение Mr.Smart » 18.03.2009 18:47:25

Понимаете невозможно вам нечего подсказать пока не будет опублекован код где возникает ошибка.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ReadXMLFile и поток

Сообщение Sergei I. Gorelkin » 18.03.2009 19:18:58

Этот баг был исправлен 15 сентября прошлого года. Обновляйтесь...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: ReadXMLFile и поток

Сообщение AltRunner » 19.03.2009 11:07:12

Извините но откуда обновляться? на оффсайте выложена версия 2.2.2 от 11 августа 2008 года.
AltRunner
незнакомец
 
Сообщения: 4
Зарегистрирован: 18.03.2009 18:25:53

Re: ReadXMLFile и поток

Сообщение Mr.Smart » 19.03.2009 11:30:11

Sergei I. Gorelkin писал(а):Этот баг был исправлен 15 сентября прошлого года. Обновляйтесь...

...странно...
AltRunner писал(а):Извините но откуда обновляться? на оффсайте выложена версия 2.2.2 от 11 августа 2008 года.

у меня проблем с XML в данной версии небыло...
покажите участок кода где возникает данная ошибка.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ReadXMLFile и поток

Сообщение AltRunner » 19.03.2009 12:15:35

Код: Выделить всё
procedure StringToXML(aXMLString:string;aXMLDocument:TXMLDocument);
var ss:TStringStream;
begin
ss:=TStringStream.Create(aXMLString);
  Try
    SS.Position:=0;
    aXMLDocument:=Nil;
    ReadXMLFile(aXMLDocument,ss);
  Finally
    SS.Free;
  end;
end;
AltRunner
незнакомец
 
Сообщения: 4
Зарегистрирован: 18.03.2009 18:25:53

Re: ReadXMLFile и поток

Сообщение Sergei I. Gorelkin » 19.03.2009 12:24:52

Баг заключался в наличии ненужного "var" в объявлении ReadXMLFile:
Код: Выделить всё
procedure ReadXMLFile(out ADoc: TXMLDocument; var f: TStream);

из-за чего она не принимала наследников TStream, в частности TStringStream.

Но в принципе в данном примере достаточно изменить тип переменной ss на TStream, и все должно работать даже без обновления.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: ReadXMLFile и поток

Сообщение AltRunner » 19.03.2009 16:30:17

Менять тип переменной пробовал - в результате Can not write to stream при попытке записать в него строку.
проблему решил установкой снапшота Lazarus 0.9.27 + FPC 2.2.5 Но попробую отредактировать юнит (использовать снапшот както страшно)
AltRunner
незнакомец
 
Сообщения: 4
Зарегистрирован: 18.03.2009 18:25:53


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru