Получить строку заданного формата, описываюшую содержимое
function ExportToString(const ADelimeter: Char = '|';
const AFieldsSeparator: Char = ':'; const AParamsDelimeter: Char = ',';
const AParamsSeparator: Char = '=';
const AQuotationChar: Char = '"'): string;
ADelimeter
AFieldsSeparator
AParamsDelimeter
AParamsSeparator
AQuotationChar
Строка заданного формата, пустая строка в случае ошибки
В приведенной ниже процедуре решается задача получения описания списка полей в xml-формате
function GetFieldListInfoXML(const AFieldList: TDbaFieldList; FieldsAsNodes: Boolean = false; const ARootName: string = 'Fields'; const AChildName: string = 'Field'): string; var Xml: TNativeXml; XmlNode: TXmlNode; FieldsListParser,FieldParamsParser: TStringList; FieldsDelimeter,FieldsSeparator,ParamsDelimeter,ParamsSeparator,QuotationChar: Char; FieldsParamsStr, NodeName,ParamName: string; I,J: Integer; begin Result:= ''; if AFieldList = nil then Exit; FieldsDelimeter:= '|'; // разделитель полей FieldsSeparator:= ':'; // разделитель полей и их параметров ParamsDelimeter:= ','; // разделитель параметов поля ParamsSeparator:= '='; // разделитель параметра поля и его значения QuotationChar:= '"'; // символ кавычек FieldsParamsStr:= // получаем список параметров полей AFieldList.ExportToString(FieldsDelimeter,FieldsSeparator,ParamsDelimeter, ParamsSeparator,QuotationChar); if FieldsParamsStr = '' then Exit; FieldsListParser:= TStringList.Create(); // создаем списки для обработки FieldParamsParser:= TStringList.Create(); Xml:= TNativeXml.CreateName(ARootName); Xml.XmlFormat:= xfReadable; // удобочитаемый вид узлов Xml.EncodingString:= 'windows-1251'; try // настраиваем списки FieldsListParser.Delimiter:= FieldsDelimeter; FieldsListParser.NameValueSeparator:= FieldsSeparator; FieldsListParser.QuoteChar:= QuotationChar; FieldParamsParser.Delimiter:= ParamsDelimeter; FieldParamsParser.NameValueSeparator:= ParamsSeparator; FieldParamsParser.QuoteChar:= QuotationChar; FieldsListParser.DelimitedText:= FieldsParamsStr; // разбираем список полей for I:= 0 to FieldsListParser.Count -1 do begin if FieldsAsNodes then begin NodeName:= FieldsListParser.Names[I]; XmlNode:= Xml.Root.NodeFindOrCreate(NodeName); // узел с именем поля end else begin NodeName:= AChildName; XmlNode:= Xml.Root; end; FieldParamsParser.DelimitedText:= FieldsListParser.ValueFromIndex[I]; // список параметров for J:= 0 to FieldParamsParser.Count -1 do begin ParamName:= FieldParamsParser.Names[J]; if not (FieldsAsNodes) and (ParamName = TDbaFieldInfoParametersNames[0]) then XmlNode:= XmlNode.NodeNew(AChildName) else if (FieldsAsNodes) and (ParamName = TDbaFieldInfoParametersNames[0]) then Continue; XmlNode.WriteAttributeString(ParamName,FieldParamsParser.ValueFromIndex[J]); end; end; Result:= Xml.Root.WriteToString; finally FieldsParamsStr:= ''; FreeAndNil(FieldsListParser); FreeAndNil(FieldParamsParser); FreeAndNil(Xml); end; end;