30.10.2013, 20:02 | #14 |
Участник
|
раз уж взялся писать - хочу отчитаться о проделанной работе
итог таков для большого текста используем 'Microsoft XML, v6.0'.IXMLDOMText запись выглядит так : MyIXMLDOMText.appendData(MyText); чтение выглядит так : MyBigText.ADDTEXT(MyIXMLDOMText.substringData(FromPosInt,BufLenInt)); для работы с бинарными данными необходимо использовать файлы, методы BigText не работают файлы и BigText сопрягаются потоками как обычно использую Base64 на верхнем уровне : запись : IF SomeRecord.BinData.HASVALUE THEN BEGIN IXMLDOMTextLoc:=XMLDOMDocumentVarPar.createTextNode(''); SomeRecord.BinData.CREATEINSTREAM(InStreamLoc); BinDataBigTextLoc.READ(InStreamLoc); BinDataFileCreatedBooleanLoc:=BinDataFileLoc.CREATETEMPFILE; BinDataFileNameText1024Loc:=BinDataFileLoc.NAME; BinDataFileLoc.CREATEOUTSTREAM(OutStreamLoc); BinDataBigTextLoc.WRITE(OutStreamLoc); EncodeFile2Base64AndWrTextNode(BinDataFileLoc,IXMLDOMTextLoc); BinDataFileLoc.CLOSE; IXMLDOMElementLoc:=XMLDOMDocumentVarPar.createElement('BinData'); IXMLDOMElementLoc.appendChild(IXMLDOMTextLoc); X.appendChild(IXMLDOMElementLoc); END; чтение : GetNodeBigText(X,'BinData',Base64BigTextLoc); IF Base64BigTextLoc.LENGTH>0 THEN BEGIN FileNameText250Loc:=CreateTmpFileName(); //использовать CREATETEMPFILE нельзя BinaryFileLoc.CREATE(FileNameText250Loc); DecodeBase64BigText2File(Base64BigTextLoc,BinaryFileLoc); BinaryFileLoc.CLOSE; SomeRecord.BinData.IMPORT(FileNameText250Loc); ERASE(FileNameText250Loc); END; оптимизация возможна транспорт по HTTP работать должен для меня на этом тема закрыта всем участвовавшим в обсуждении - большое спасибо |
|