powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание xml
45 сообщений из 45, показаны все 2 страниц
Создание xml
    #39481721
igor_prg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, ALL.
с xml раньше не работал. А тут понадобилось создать xml-файл.
Нашел в интернете рабочий способ:
Код: pascal
1.
2.
3.
4.
5.
6.
  Xml:=TXMLDocument.Create(nil);
  Xml.Active:=false;
  with Xml do begin
    Active := true;
    Version := '1.0';
    Encoding := 'windows-1251';[SRC DELPHI]


end;
with xml do
begin
with AddChild('primer') do ...
[/SRC]
Но все работает при небольшом объеме данных выгрузки.
А при большом выбрасывает ошибку, что не хватает памяти.
Типа 32-разрядное приложение не может занимать память больше 2 гигов.
Слыхал, что есть другие способы создания xml-файлов, без хранения
всего дерева. Спасибо.
...
Рейтинг: 0 / 0
Создание xml
    #39481747
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igor_prg,

Google, "direct XML writer". Например, OmniXML пишет что в нём есть, но я лично им не пользовался.
...
Рейтинг: 0 / 0
Создание xml
    #39481751
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый быстрый и простой способ записи конкретного XML в файл - это просто запись текста в файл
XML это обычный текст. Ничего не мешает его писать как обычный текст.
TStreamWriter очень удобно подходит например
...
Рейтинг: 0 / 0
Создание xml
    #39481759
igor_prg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 alekcvp
Спасибо.

2 krapotkin
Я так в самом начале и сделал. Но если в тексте будут какие-то спецсимволы
(типа "&"), то xml файл не пройдет валидность
...
Рейтинг: 0 / 0
Создание xml
    #39481796
igor_prg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://wiki.freepascal.org/XML_Tutorial/ru
модули DOM и XMLWrite из freepascal могут быть использованы в delphi?
...
Рейтинг: 0 / 0
Создание xml
    #39481860
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я давно агитирую местных, давайте напишем парсер и писатель XML на платформе CachedTexts. Аналогов по скорости не будет. Но желающих помогать нет, а без помощи я ещё фиг знает когда этим займусь
...
Рейтинг: 0 / 0
Создание xml
    #39481879
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igor_prgбудут какие-то спецсимволы
ну так мы же сами пишем текст. сами и спецсимволы заменим
их всего-то десяток
...
Рейтинг: 0 / 0
Создание xml
    #39482078
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой вариант преобразования текстовой строки в XML-строку с учетом спецсимволов:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
/// <summary>
///   Конвертация строки в XML-строку
/// </summary>
/// <param name="ASource">
///   Исходная строка
/// </param>
/// <returns>
///   Строка в формате XML
/// </returns>
function ConvertToXmlString(const ASource: string): string;
var
  I: Integer;
begin
  // инициализируем
  Result := '';
  // по каждому символу
  if Length(ASource) > 0 then
  begin
    for I := Low(ASource) to High(ASource) do
    begin
      case ASource[I] of
        '<': Result := Result + '<';
        '>': Result := Result + '>';
        '"': Result := Result + '"';
        '&': Result := Result + '&';
      else
        // просто добавляем
        Result := Result + ASource[I];
      end;
    end;
  end;
end;



и простейший пример прямой записи в XML-файл:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure SaveToFile(const AFileName: string): Integer;
var
  IntlFile: System.Classes.TStringList;
begin
  IntlFile := System.Classes.TStringList.Create;
  try
    // обязательный заголовок файла в XML-формате
    IntlFile.Add('<?xml version="1.0" encoding="utf-16" standalone="yes"?>');
    // простейшее тело документа
    IntlFile.Add('<Group title="' + ConvertToXmlString('вот такой <КЛАССНЫЙ со спецсимволами> заголовок') + '">');
    IntlFile.Add('</Group>');
    // записываем в Unicode, поддерживаются все языки, включая китайский, иврит, еще много других неизвестных мне
    IntlFile.SaveToFile(AFileName, TEncoding.Unicode);
  finally
    IntlFile.Free;
  end;
end;
...
Рейтинг: 0 / 0
Создание xml
    #39482082
autp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот и глюк форума, он не правильно отобразил часть исходников)))) имелось ввиду следующее:

case ASource[I] of
'<': Result := Result + '<';
'>': Result := Result + '>';
'"': Result := Result + '"';
'&': Result := Result + '&';
else
// просто добавляем
Result := Result + ASource [I];
end;
...
Рейтинг: 0 / 0
Создание xml
    #39482086
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
емое, попробую еще раз:

case ASource[I] of
'<': Result := Result + '& l t ; ' ;
'>': Result := Result + '& g t ; ' ;
'"': Result := Result + '& q u o t ; ' ;
'&': Result := Result + '& a m p ; ' ;
else
// просто добавляем
Result := Result + ASource[I];
end;

убрать пробелы, где выделено жирным шрифтом
...
Рейтинг: 0 / 0
Создание xml
    #39482130
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
и простейший пример прямой записи в XML-файл:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure SaveToFile(const AFileName: string): Integer;
var
  IntlFile: System.Classes.TStringList;
begin
  IntlFile := System.Classes.TStringList.Create;
  try
    // обязательный заголовок файла в XML-формате
    IntlFile.Add('<?xml version="1.0" encoding="utf-16" standalone="yes"?>');
    // простейшее тело документа
    IntlFile.Add('<Group title="' + ConvertToXmlString('вот такой <КЛАССНЫЙ со спецсимволами> заголовок') + '">');
    IntlFile.Add('</Group>');
    // записываем в Unicode, поддерживаются все языки, включая китайский, иврит, еще много других неизвестных мне
    IntlFile.SaveToFile(AFileName, TEncoding.Unicode);
  finally
    IntlFile.Free;
  end;
end;


а ты вообще топикстартера читал ?
igor_prg А при большом выбрасывает ошибку, что не хватает памяти.
Типа 32-разрядное приложение не может занимать память больше 2 гигов.
...
Рейтинг: 0 / 0
Создание xml
    #39482148
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr

конечно я читал топик ТС и прекрасно понимаю суть проблемы, т.к. сам с ней сталкивался на заре начала работы с XML-документами. А суть проста - TXmlDocument очень прожорлив к памяти и из за этого видимо очень тормознут. Записывая тот же самый документ через (например!) TStringList, мы используем памяти как минимум в 10 раз меньше. И чем разветвленнее документ (т.е. чем больше вложенности)), тем он больше жрет памяти при работе через TXmlDocument.

Ну и никто не запрещает записывать результирующий файл кусками, а не собирать его в памяти. ТС направления для работы выданы, я считаю))
...
Рейтинг: 0 / 0
Создание xml
    #39482216
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаю одну контору которая тоже очень любит xml как обычные текстовые файлы создавать. Проблема в том что потом эти текстовые файлы периодически не проходят проверку по xsd схеме :))
...
Рейтинг: 0 / 0
Создание xml
    #39482220
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне понравился модуль (бесплатный) SimpleXML. Правда на большие объемы его не проверял.
...
Рейтинг: 0 / 0
Создание xml
    #39482249
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
любой компонент или библиотека нужны лишь для разбора структурированного хранения XML
здесь эта задача вообще не стоит
зачем тогда сверхдвижения?
...
Рейтинг: 0 / 0
Создание xml
    #39482251
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиЗнаю одну контору которая тоже очень любит xml как обычные текстовые файлы создавать. Проблема в том что потом эти текстовые файлы периодически не проходят проверку по xsd схеме :))

Можно подумать, что при создании через DOM файлы будут гарантировано проходить проверку и валидация выполняется в момент создания xml-файла.
...
Рейтинг: 0 / 0
Создание xml
    #39482362
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igor_prg,

Недавно обсуждали тут быструю запись XML
Мой вариант оказался в 15 быстрее кода автора. И наверное раз в 50 быстрее решений, которые тебе здесь предлагают

Можешь попытаться разобраться
20576292
...
Рейтинг: 0 / 0
Создание xml
    #39482388
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
твой код в 50 раз быстрее, чем простое заполнение tstringlist и запись в файл?)))
...
Рейтинг: 0 / 0
Создание xml
    #39482402
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2,

да, это правда.
Тут многие тестировали его код - так hdd просто взрывались: скорость записи в десятки раз превышает предельную скорость, на которую рассчитано оборудование.
...
Рейтинг: 0 / 0
Создание xml
    #39482409
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД

я скорость данной библиотеки не проверял, но исходники внимательно посмотрел.
слабые места библиотеки:
- использование приведений pointer() - кроссплатформенность не в почете?
- использование label - сразу вспомнились времени turbo pascal 7.0 и delphi 1.0

для справедливости я соглашусь, что операции с текстовыми строками дорогие в плане тиков, поэтому работа с фиксированным буфером в памяти с периодическим скидыванием очередной сформированной части буфера в файл (используя кэширование) будет самым быстрым.

проверим :-)
...
Рейтинг: 0 / 0
Создание xml
    #39482424
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
writeln + settextbuf и не надо никакого стороннего кода. Быстро.
...
Рейтинг: 0 / 0
Создание xml
    #39482443
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUЯ давно агитирую местных, давайте напишем парсер и писатель XML на платформе CachedTextsПоделиться своим парсером? Писал многопоточный читатель/писатель. Читатель поддерживает кучу кодировок, писатель пишет только в UTF-8. Не поддерживается запись комментариев и не поддерживаются пространства имен
...
Рейтинг: 0 / 0
Создание xml
    #39482684
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Выложи в эту ветку, пожалуйста: http://www.sql.ru/forum/1204260/oficialnyy-reliz-biblioteki-cachedtexts
Вообще наиболее эффективный формат такой разработки я представляю себе как "в четыре руки". То есть один запаривается над архитектурой и скоростью, второй определяет (уточняет) правила и проверяет корректность выполнения кода, может быть через юнит тесты. Подумай, может быть потянешь такой формат.
...
Рейтинг: 0 / 0
Создание xml
    #39482688
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2 SOFT FOR YOU
твой код в 50 раз быстрее, чем простое заполнение tstringlist и запись в файл?)))

Разумеется. Вот здесь был тест на запись 100Мб: http://www.sql.ru/forum/1178076-a/oficialnyy-reliz-cachedbuffers
На 1Гб разница будет колоссальная, и то, TStringList сработает только на x64
...
Рейтинг: 0 / 0
Создание xml
    #39482690
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. В тесте как раз разница в 50 раз относительно TStringList :)
...
Рейтинг: 0 / 0
Создание xml
    #39482712
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUP.S. В тесте как раз разница в 50 раз относительно TStringList :)
TStringList люди-то для примера приводят. Никто в своём уме 1GB через TStringList перелопачивать не будет.
Скорее всего люди просто сделают Stream.Write(buffer, buffer_size). И какое преимуществу даст твой магический способ записи перед этим методом?
Можно ещё "подшаманить", чтобы в буфере было, к примеру, не менее 2048 байт в момент записи. Что там ещё за волшебные оптимизации могут быть, кроме как использование SSD? :-)
...
Рейтинг: 0 / 0
Создание xml
    #39482752
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUP.S. В тесте как раз разница в 50 раз относительно TStringList :)

Да уж. Быстродействие впечатляет.
...
Рейтинг: 0 / 0
Создание xml
    #39482763
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Твое у меня выполняется за 700-900 мс.

А вот якобы быстрая XML писалка:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
  TSimpleXmlWriter = class
    Finished : boolean;
    Buff     : string;
    RLock    : boolean;
    WLock    : boolean;
    Writer   : ITask;

    procedure WriteToBuff(const Text: string);

    constructor Create(const AFileName: string);
    destructor Destroy; override;

    procedure OpenElement(const Name: string; const CloseTag: TXmlCloseTag);
    procedure CloseElement(const Name: string);
    procedure WriteAttribute(const Name: string; const Value: Integer; const CloseTag: TXmlCloseTag);
  end;

constructor TSimpleXmlWriter.Create(const AFileName: string);
begin
  Finished:=False;
  Writer:=TTask.Create(procedure ()
  var
    xBuff : TBytes;
    F     : TFileStream;
  begin
    F:=TFileStream.Create(AFileName,fmCreate,fmShareDenyNone);
    try
      while not Finished or (length(Buff)>0) do begin
        try
          if RLock then Continue;
          WLock:=True;
          if RLock then Continue;
          if length(Buff)>0 then begin
            xBuff:=TEncoding.UTF8.GetBytes(Buff);
            Buff:='';
            WLock:=False;
            F.Write(xBuff[0],length(xBuff));
          end;
        finally
          WLock:=False;
        end;
        Sleep(1);
      end;
    finally
      F.Free;
    end;
  end);
  Writer.Start;
  Buff:='<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
end;

destructor TSimpleXmlWriter.Destroy;
begin
  Finished:=True;
  TTask.WaitForAll([Writer]);

  inherited;
end;

procedure TSimpleXmlWriter.OpenElement(const Name: string; const CloseTag: TXmlCloseTag);
begin
  if CloseTag=xtClose then begin
    WriteToBuff('<'+Name+'>');
  end else begin
    WriteToBuff('<'+Name);
  end;
end;

procedure TSimpleXmlWriter.CloseElement(const Name: string);
begin
  WriteToBuff('</'+Name+'>');
end;

procedure TSimpleXmlWriter.WriteAttribute(const Name: string; const Value: Integer; const CloseTag: TXmlCloseTag);
begin
  if CloseTag=xtClose then begin
    WriteToBuff(' '+Name+'="'+Value.ToString+'">');
  end else begin
    WriteToBuff(' '+Name+'="'+Value.ToString+'"');
  end;
end;

procedure TSimpleXmlWriter.WriteToBuff(const Text: string);
begin
  RLock:=True;
  while WLock do sleep(0);
  Buff:=Buff+Text;
  RLock:=False;
end;

7.5 секунд.

Причем дело не в записи на диск.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
  TSimpleXmlWriter = class
    procedure WriteToBuff(const Text: string);

    constructor Create(const AFileName: string);
    destructor Destroy; override;

    procedure OpenElement(const Name: string; const CloseTag: TXmlCloseTag);
    procedure CloseElement(const Name: string);
    procedure WriteAttribute(const Name: string; const Value: Integer; const CloseTag: TXmlCloseTag);
  end;

constructor TSimpleXmlWriter.Create(const AFileName: string);
begin
end;

destructor TSimpleXmlWriter.Destroy;
begin
end;

procedure TSimpleXmlWriter.OpenElement(const Name: string; const CloseTag: TXmlCloseTag);
begin
  if CloseTag=xtClose then begin
    WriteToBuff('<'+Name+'>');
  end else begin
    WriteToBuff('<'+Name);
  end;
end;

procedure TSimpleXmlWriter.CloseElement(const Name: string);
begin
  WriteToBuff('</'+Name+'>');
end;

procedure TSimpleXmlWriter.WriteAttribute(const Name: string; const Value: Integer; const CloseTag: TXmlCloseTag);
begin
  if CloseTag=xtClose then begin
    WriteToBuff(' '+Name+'="'+Value.ToString+'">');
  end else begin
    WriteToBuff(' '+Name+'="'+Value.ToString+'"');
  end;
end;

procedure TSimpleXmlWriter.WriteToBuff(const Text: string);
begin
end;

Ибо этот "пустой" код выполняется аж за 5 секунд!
Неужели операции со строками настолько тормозные?
...
Рейтинг: 0 / 0
Создание xml
    #39482766
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У автора проблема не в скорости, а в том, что XML-данные надо в потоке писать из-за их объема.
...
Рейтинг: 0 / 0
Создание xml
    #39482769
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Объем как раз и приводит к проблемам со скоростью.
...
Рейтинг: 0 / 0
Создание xml
    #39482773
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat

А вот якобы быстрая XML писалка:


Закопай обратно
...
Рейтинг: 0 / 0
Создание xml
    #39482845
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Как показывает практика, скорость записи, если речь конечно о файлах до 100-300Мб, SSD и ОС начиная с Висты, упирается в такты, а не ожидание винта, потому что по сути запись идёт в ОЗУ, а на диск оно сбрасывается спустя время. И здесь важна оптимизация по регистрам, инлайны, не говоря уже о высоких материях типа конвертации, проверок, присвоение вместо Move, вызов дополнительных функций. Конкатенациях строк - это отдельная прожорливая штука. Потому, что надо выделить память в менеджере, скопировать, очистить. Всё это оборачивается try/finally и interlocked методами. Очень хорошо иллюстрируется разница в примере по CachedBuffers. Ручная низкоуровневая запись обходится в 109мск. А человеческая, "высокоуровневая", хоть и жутко оптимизированная - уже 265мск. То есть вопросы кеш-промахов и ожиданий диска, о чем любят говорить противники чрезмерной оптимизации, просто не играют сколько-нибудь значимой роли.
...
Рейтинг: 0 / 0
Создание xml
    #39482858
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

авторТо есть вопросы кеш-промахов и ожиданий диска, о чем любят говорить противники чрезмерной оптимизации, просто не играют сколько-нибудь значимой роли.

До тех пор, пока размер данных не упрётся в кэш веника.
...
Рейтинг: 0 / 0
Создание xml
    #39482861
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Наверное, да. Но в этом случае разница по скорости будет уже не в 50 раз, а в 25. Что само по себе не мало )
...
Рейтинг: 0 / 0
Создание xml
    #39482865
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schirgreat

А вот якобы быстрая XML писалка:


Закопай обратно
Откопай быструю.
...
Рейтинг: 0 / 0
Создание xml
    #39482990
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatschiпропущено...


Закопай обратно
Откопай быструю.

20612383
...
Рейтинг: 0 / 0
Создание xml
    #39483035
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Дело хорошее, но, судя по тестам, работает в 5 раз медленнее возможного
...
Рейтинг: 0 / 0
Создание xml
    #39483064
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatНеужели операции со строками настолько тормозные?

> WriteToBuff(' '+Name+'="'+Value.ToString+'">');
Сложение строк и понятие "быстрый" в Delphi несовместимое понятие.
Надо делать inline-функции типа WriteChar, WriteBuf и вызывать их по-очереди.
Разумеется, при условии что в них не что-то вроде: "Buf := Buf + Text;".
...
Рейтинг: 0 / 0
Создание xml
    #39483097
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUschi,

Дело хорошее, но, судя по тестам, работает в 5 раз медленнее возможного

Но что характерно, без ошибок.
...
Рейтинг: 0 / 0
Создание xml
    #39483112
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Ну так и через CachedBuffers без ошибок
...
Рейтинг: 0 / 0
Создание xml
    #39483156
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

alekcvpСложение строк и понятие "быстрый" в Delphi несовместимое понятие.

в других языках, впрочем, тоже
...
Рейтинг: 0 / 0
Создание xml
    #39483184
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igor_prgСлыхал, что есть другие способы создания xml-файлов, без хранения
всего дерева.

Microsoft XML Lite например

https://github.com/the-Arioch/Delphi-XmlLite/tree/master/Samples/DynArrays to-from files
...
Рейтинг: 0 / 0
Создание xml
    #39483185
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igor_prgЯ так в самом начале и сделал. Но если в тексте будут какие-то спецсимволы
(типа "&"), то xml файл не пройдет валидность

для этого есть escaping-функции ( например в составе Jedi CodeLib )

но все равно останется вопрос с CDATA-блоками, сбалансированным открыванием-закрыванием тээгов и т.д.
...
Рейтинг: 0 / 0
Создание xml
    #39483195
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp"direct XML writer". Например, OmniXML пишет что в нём есть

Возможно, имеет смысл попробовать OXml, но OmniXML...

Функции direct XML writer я в нем не искал, а вот чтение монстрового XLSX файла пробовал (очень удачно прислали медвежуть, сформированную каким-то надмозгом).

Сравнительно с банальным Microsoft XML v6 через TXMLDocument этот Omni жрал заметно больше памяти и заметно медленнее работал.

Нет, для Дельфи он действительно весьма удбный и приятный для использования на малых и средних файлах, но рекорды по объёму/скорости я бы на нём ставить даже не пытался.

Впрочем, я вообще в этом плане извращенец и маленькие XML файлы обычно лени ради читаю через JSON SuperObject
...
Рейтинг: 0 / 0
Создание xml
    #39483197
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatSOFT FOR YOUP.S. В тесте как раз разница в 50 раз относительно TStringList :)

Да уж. Быстродействие впечатляет.

TStringList - сам по себе очень медленный и жадный до памяти класс. В нём слишком много свисков и перделок на каждый чих.
Если уж хочется скорости и объёмов, то надо вместо него использовать TList<string>
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]