Работа с XML в FastScript

отредактировано 19:44 Раздел: FastScript
Собственно, интересует тема. Выгрузка своей информации в XML, загрузка из XML (в базу).
Есть ли какие-то встроенные функции для работы с XML? Или как правильно (и есть ли вообще такая возможность) "обернуть" дельфийский TXMLDocument?

Комментарии

  • отредактировано March 2006
    В "Руководстве разработчика Fast Script"(стр. 61) описано как добавлять собственные классы к FS.
  • отредактировано 19:44
    Да, в принципе, даже нашелся встроенный TfsXMLDocument ;)
    Сейчас не могу загнать туда XML (банально заголовок XML). Нет свойства XML, есть только загрузка из потока и файла. А у класса TMemoryStream нет метода WriteBuffer чтобы хоть из строки запихать туда нужный текст, а затем загрузить в TfsXMLDocument. Но не судьба. Есть идеи? Желательно уже встроенными средствами, без добавления классов и т.п.
  • отредактировано 19:44
    написал:
    А у класса TMemoryStream нет метода WriteBuffer чтобы хоть из строки запихать туда нужный текст,
    Используй TStringStream
  • отредактировано 19:44
    У TSream есть методы read(var Buffer:String;Count:Longint):Longint и write(Buffer:String;Count:Longint):Longint.
  • отредактировано 19:44
    написал:
    написал:
    А у класса TMemoryStream нет метода WriteBuffer чтобы хоть из строки запихать туда нужный текст,
    Используй TStringStream
    Unknown type:'TStringStream'

    Вообще, оказалось, что заголовок уже есть по умолчанию, только какой-то неполный и с "кривым" корневым элементом:

    <?xml version="1.0"?></>

    Как же это разгребать то?.. Либо всё-таки заменять на свой заголовок, либо как-то имя корневого элемента поменять. Попытки типа fsXMLDocument1.Root.Name := 'data'; оканчиваются ошбкой AV.
  • отредактировано 19:44
    написал:
    У TSream есть методы read(var Buffer:String;Count:Longint):Longint и write(Buffer:String;Count:Longint):Longint.
    var
      s: string;
      xd: TfsXMLDocument;
      ms: TStream;
    begin
        xd := TfsXMLDocument.Create;
        try
          ms := TStream.Create;
          try
            s := '<?xml version="1.0" encoding="UTF-8"?><data></data>';
            ms.Write(s, Length(s));
            ms.Position := 0;
            xd.LoadFromStream(ms);
          finally
            ms.Free
          end;
    
          xd.SaveToFile('c:\2.xml');
        finally
          xd.Free;
        end;
    
    ...
    end.
    

    Что делаю не так?
  • отредактировано 19:44
    TStream абстрактный класс, вам нужно использовать TMemoryStream он наследуется от TStream.
    Так должно работать:
    var
     s: string;
     xd: TfsXMLDocument;
     ms: TMemoryStream;
    begin
       xd := TfsXMLDocument.Create;
       try
         ms := TMemoryStream.Create;
         try
           s := '<?xml version="1.0" encoding="UTF-8"?><data></data>';
           ms.Write(s, Length(s));
           ms.Position := 0;
           xd.LoadFromStream(ms);
         finally
           ms.Free
         end;
    
         xd.SaveToFile('c:\2.xml');
       finally
         xd.Free;
         end;
    end.
    
  • отредактировано 19:44
    написал:
    TStream абстрактный класс, вам нужно использовать TMemoryStream он наследуется от TStream.
    Так должно работать:
    И всё равно не работает ;)
    AV и всё тут...

    Вроде всё логично и должно работать, но... может быть это еще и в самой программе какие-то проблемы. Можете попробовать у себя - у Вас работает приведенный Вами код?
  • отредактировано 19:44
    Проверил, работает.
  • отредактировано 19:44
    написал:
    Проверил, работает.
    Да уж... попробовал в другом проекте всё это зацепить. Работает. Будем мучаться дальше сами.
    Спасибо всем за помощь.
  • отредактировано 19:44
    мдя... те же яйца, вид сбоку.
         with xd.Root.Add do
          begin
            Name := 'ddd';
            Text := 'qqq';
          end;
    

    даёт на выходе такую фигню:

    <?xml version="1.0"?><data><ddd qqq/></data>


    как же это всё-таки всё работает? ;)
  • отредактировано 19:44
    TfsXMLDocument - я бы сказал заточем именно под FastReport.
    Для полноценно работы с xml всё же лучше использовать другую (не спрашивай у меня какую ;) ) библиотеку
  • отредактировано 19:44
    написал:
    TfsXMLDocument - я бы сказал заточем именно под FastReport.
    Для полноценно работы с xml всё же лучше использовать другую (не спрашивай у меня какую ;) ) библиотеку
    Да тоже уже понял, что заморочек больше с ним. Данные можно только в аттрибуты пихать, плюс проблемы с кодировками. Думаю, лучше будет наклепать DLL с соотв. функциональностью и просто вызвать функцию, передав путь до базы данных, пусть само всё делает.
    А оказалось, что и DLL не так просто зацепить к FS. Соседняя тема как раз про это, что-то там не срастается пока.
  • отредактировано 19:44
    написал:
    Думаю, лучше будет наклепать DLL
    Если это Delphi класс, почему бы не зарегестрировать его в скрипте?
  • отредактировано 19:44
    написал:
    написал:
    Думаю, лучше будет наклепать DLL
    Если это Delphi класс, почему бы не зарегестрировать его в скрипте?
    Не хочу ради одной функции, которая нужна одному клиенту, вносить изменения в исходники самой программы (только если это не позволит в будущем решать схожие задачи). Или Вы про что?

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.