M
markl
Уважаемые форумчане, прошу Вашей помощи!
Используя XE2 (x86) и TJclSimpleXML из библиотеки JCL ($Date:: 2012-09-04, $Rev:: 3861) пытаюсь отсортировать теги по значению их свойства (если оно есть) и получаю Invalid pointer operation.
Ошибка возникает в фукнкции JclSimpleXml.QuickSort в момент переприсваивания указателей.
Помогите, пж, понять: в чём я не прав?
Полный проект в приложении.
Используя XE2 (x86) и TJclSimpleXML из библиотеки JCL ($Date:: 2012-09-04, $Rev:: 3861) пытаюсь отсортировать теги по значению их свойства (если оно есть) и получаю Invalid pointer operation.
Код:
procedure T_MainForm._Sort(Elems: TJclSimpleXMLElems);
var i : Integer;
begin
Elems.CustomSort(CompareXMLItems);
for i := 0 to Elems.Count-1 do
if Elems[i].Items<>nil then
if Elems[i].ItemCount>1 then
_Sort(Elems[i].Items);
end;
function T_MainForm.CompareXMLItems(Elems: TJclSimpleXMLElems; Index1, Index2: Integer): Integer;
begin
if (Elems[Index1].Properties<>nil) and (Elems[Index2].Properties<>nil) then
begin
if Elems[Index1].Properties.IntValue('Id')<Elems[Index2].Properties.IntValue('Id') then Result := -1 else
if Elems[Index1].Properties.IntValue('Id')>Elems[Index2].Properties.IntValue('Id') then Result := 1 else
Result := 0;
end else Result := 0;
end;
procedure T_MainForm.Button1Click(Sender: TObject);
var fName : String;
begin
fName := ExtractFilePath(ParamStr(0))+'entity.xml';
xml := TJclSimpleXML.Create;
xml.LoadFromFile(fName);
_Sort(xml.Root.Items);
xml.Options := xml.Options - [sxoAutoEncodeValue];
xml.SaveToFile(fName+'.!!!.xml');
FreeAndNil(xml);
end;
Ошибка возникает в фукнкции JclSimpleXml.QuickSort в момент переприсваивания указателей.
Помогите, пж, понять: в чём я не прав?
Полный проект в приложении.