Показать сообщение отдельно
  #1  
Старый 24.09.2012, 10:54
markl markl вне форума
Прохожий
 
Регистрация: 24.09.2012
Сообщения: 1
Репутация: 10
По умолчанию JCL сортировка XML

Уважаемые форумчане, прошу Вашей помощи!

Используя 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 в момент переприсваивания указателей.

Помогите, пж, понять: в чём я не прав?

Полный тестовый проект в приложении.
Вложения
Тип файла: rar JCL_XML.RAR (87.0 Кбайт, 7 просмотров)
Ответить с цитированием