powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XML как альтернатива INI
25 сообщений из 154, страница 1 из 7
XML как альтернатива INI
    #40093684
Damir_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Хотел спросить, может ли xml-файл служить альтернативой ini-файлам? У меня имеется программа которая использует профили материалов. Каждый профиль - это отдельный ini-файл , в котором хранится информация о материале. Я просто с xml еще не работал. Можно ли например все профили хранить в одном xml-файле, т.е. получается своего рода база данных, а потом считывать обращаясь к секциями выбранного материала для загрузки его параметров?
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093685
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85,

да, конечно можно. Единственное, есть два типа парсеров XML, одни строят полностью дерево узлов (DOM, Document Object Model), другие проходят документ последовательно и полное дерево не строят (SAX - Simple API for XML). Часто используются парсеры первого типа, но если документ XML очень большой, то при использовании парсеров первого варианта могут возникать тормоза. Зависит наверное от реализации, но по-моему раньше, по крайней мере, это становилось актуальным на файлах в десятки мегабайт например. Если у вас данные меньше, то без проблем, можно использовать XML. Компонент TXMLDocument позволяет работать с XML.
В Delphi впридачу есть мастер, позволяющий по схеме XML или по образцу разбираемого файла построить интерфейсы для работы с файлами конкретного вида. При открытом проекте File - New - Delphi Projects - XML - XML Data Binding.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093689
Damir_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,
спасибо. Да , думаю что нужно в моём случае использовать первый тип, т.к. файлов в целом по статистике накапливается немного, ну штук 8-10 максимум, да и секций в каждом штук 6-7. Так что копейки все это весит по информации. Да, конечное еще с этим форматом мне предстоит разбираться, что к чему)
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093693
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше сразу на json переходи.

XML не эффективен и устарел.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093694
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85может ли xml-файл служить альтернативой ini-файлам?

Не может. Как вручную редактируемый формат он слишком заморочен. Как внутренний
формат - слишком неэффективен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093696
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JSON по моему опыту получился "дешевле" в понимании и редактировании чем SQL. Но ini файл ещё проще
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093697
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Damir_85
Здравствуйте.
Хотел спросить, может ли xml-файл служить альтернативой ini-файлам?

Нет, нельзя.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093700
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85
Да, конечное еще с этим форматом мне предстоит разбираться, что к чему)


Вот пример сохранения расписания в 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.
type
  TVMOverlay = record
    FileName: string;
    Title: string;
    Start: TSQLTimeStamp;
    Duration: TSQLTimeStamp;
    Kind: TOverlayKind;
    Input: integer;
    OverNo: integer;
    IsOn: boolean;
    RunBySched: boolean;
  end;
  TOverlayList = TList<TVMOverlay>;
...
procedure SaveActionToXmlNode(const aAction: TVMOverlay; var aDoc: IXMLDocument);
var Node, SubNode, Attr: IXMLNode;
    Tmp: TSQLTimeStamp;
    DT: TDateTime;
begin
  Node := aDoc.DocumentElement.AddChild('overlay');
  SubNode := Node.AddChild('filename');
  SubNode.Text := aAction.FileName;
  SubNode := Node.AddChild('title');
  SubNode.Text := aAction.Title;
  SubNode := Node.AddChild('start');
  SubNode.Text := SqlTimeStampToStr('dd.mm.yyyy hh:nn:ss.zzz', aAction.Start);
  SubNode := Node.AddChild('duration');
  Tmp := aAction.Duration;
  Tmp.Year := 2021;
  Tmp.Month := 1;
  Tmp.Day := 1;
  DT := SQLTimeStampToDateTime(Tmp);
  SubNode.Text := FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz', DT);

  Attr := aDoc.CreateNode('kind', ntAttribute);
  Attr.NodeValue := ord(aAction.Kind);
  Node.AttributeNodes.Add(Attr);

  Attr := aDoc.CreateNode('input', ntAttribute);
  Attr.NodeValue := aAction.Input;
  Node.AttributeNodes.Add(Attr);

  Attr := aDoc.CreateNode('overno', ntAttribute);
  Attr.NodeValue := aAction.OverNo;
  Node.AttributeNodes.Add(Attr);
end;


procedure SaveOverlaysToFile(aOverlays: TOverlayList; const aFileName: string);
var XmlDoc: IXMLDocument;
    Root: IXMLNode;
    i: integer;
begin
  XmlDoc := TXMLDocument.Create(nil);
  XMLDoc.Options := XMLDoc.Options + [doNodeAutoIndent];
  XmlDoc.Active := True;
  Root := XmlDoc.CreateElement('overlays', '');
  XmlDoc.DocumentElement := Root;
  for i := 0 to OverlayList.Count - 1 do
  SaveActionToXmlNode(OverlayList.Items[i], XmlDoc);
  XmlDoc.SaveToFile(aFileName);
  XmlDoc := nil;
end;



Файл:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<overlays>
  <overlay kind="1" input="0" overno="1">
    <filename>D:\photoes\DSCN0875.JPG</filename>
    <title>DSCN0875.JPG</title>
    <start>02.03.2021 18:40:00.000</start>
    <duration>01.01.2021 00:01:00.000</duration>
  </overlay>
  <overlay kind="1" input="0" overno="3">
    <filename>D:\photoes\P_20170922_114554.jpg</filename>
    <title>P_20170922_114554.jpg</title>
    <start>02.03.2021 18:41:00.000</start>
    <duration>01.01.2021 00:01:00.000</duration>
  </overlay>
  <overlay kind="2" input="4" overno="1">
    <filename></filename>
    <title></title>
    <start>06.03.2021 18:38:00.000</start>
    <duration>01.01.2021 00:10:00.000</duration>
  </overlay>
</overlays>


Да, можно пользоваться JSON, но для хранения настроек, профилей, как вы написали, и т.п., не играет особой роли избыточность текста в XML - ну будет в файле не 15 Кб, а 30 Кб, особой разницы нет.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093702
Фотография sasha27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85
Здравствуйте.
Хотел спросить, может ли xml-файл служить альтернативой ini-файлам? У меня имеется программа которая использует профили материалов. Каждый профиль - это отдельный ini-файл , в котором хранится информация о материале. Я просто с xml еще не работал. Можно ли например все профили хранить в одном xml-файле, т.е. получается своего рода база данных, а потом считывать обращаясь к секциями выбранного материала для загрузки его параметров?


Как угодно можно организовать, главное чтоб было удобно Вам пользоваться. Хоть XML, ClientDataSet, TMemTableEh из EhLib, да хоть обычный DBF - все в одном файле будет.
XML хорош тем, что туда можно разно-структурированные данные засунуть.
Нормально вручную редактируемый и читаемый формат, тут на вкус и цвет кому как...
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093704
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damir_85,

Может, действительно стоит использовать JSON, как написали. Он несколько компактней (зотя xml тоже можно делать более компактным, используя атрибуты и разумно короткие имена узлов). Я с JSON всего однажды или пару раз имел дело, относително давно, может быть с ним и меньше кода надо писать для сохранения/загрузки, точно не скажу.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093707
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все настройки должны быть в базе.
Разве что, если важен код рабочего места - то его можно в инифайлик затулить. Но лучше использовать имя компьютера.
Или номер ком порта (да и это лучше в базу, с привязкой к номеру рабочего места, а лучше - к имени компьютера).
Зачем для этого xml - не знаю.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093710
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Все настройки должны быть в базе

Каждый раз, когда я это читаю, мне становится интересно - где хранить настройки соединения с базой.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093711
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Просто примени рекурсию.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093715
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
Все настройки должны быть в базе

Каждый раз, когда я это читаю, мне становится интересно - где хранить настройки соединения с базой.
Ну да, прописать в инифайле одну строчку. Опять же, xml здесь не нужен.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093716
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Опять же, xml здесь не нужен.

Да какая разница. С точки зрения этой задачи xml, json, ini, stringlist, registry, таблица в БД - эквивалентно тривиальные хранилища набора пар path.name=value. Если программист всерьёз задумывается о том, что же выбрать, и собирается писать разный код для этих случаев - он, мягко говоря, плохой программист.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093725
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всегда, развели демагогию и флуд :)

ИМХО, хранить лучше всего в том формате, для которого есть удобный парсер, позволяющий на "раз-два-три" читать/писать данные
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093806
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Все настройки должны быть в базе.

Ага. Причем сразу на Oracle, который живет на отдельном сервере.

Автору:
XML - хороший вариант, где можно потом и структуру контролировать, и всяких ORM навешать. Хоть и замороченный чуток (но это опциональные фичи, которые могут и не понадобиться никогда), но он явно переживет весь софт, который есть на данный момент.
У классического JSON есть несколько тараканов, которые решены только в JSON5. Не критичны, но имеют место.
А если нужна прям совсем лаконичность, то YAML
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093818
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Damir_85может ли xml-файл служить альтернативой ini-файлам?

Как внутренний формат - слишком неэффективен.

Это если сериализаторами не пользоваться. Но там всё равно лучше JSON.
YuRock
Все настройки должны быть в базе.

... даже когда нет базы вообще 😃
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093823
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal

А если нужна прям совсем лаконичность, то YAML

А для YAML есть что-то подобное https://github.com/grijjy/GrijjyFoundation/blob/master/Grijjy.Bson.Serialization.pas ?
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093845
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Альтернатива ini-файлам - реестр.

В нем можно хранить настройки программы, как общие для всех пользователей,
так и для каждого конкретного пользователя отдельно.

Если же цель состоит в обмене данными, то XML или JSON большой разницы нет.
JSON в настоящее время моднее.

" Каждый профиль - это отдельный ini-файл , в котором хранится информация о материале ".
Идея хранения данных в ini-файлах со временем уступает место другим идеям.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093847
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Альтернатива ini-файлам - реестр.
Реестр и ini файл - сильно разные вещи.
По хорошему - для разных задач предназначенные.

Реестр нужен для хранения данных с общим доступом, ini для внутри-програмных данных.

Хранить внутренние настройки ПО в реестре - дурной тон.

ИМХО.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093862
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Альтернатива ini-файлам - реестр.

В нем можно хранить настройки программы, как общие для всех пользователей,
так и для каждого конкретного пользователя отдельно.

Если же цель состоит в обмене данными, то XML или JSON большой разницы нет.
JSON в настоящее время моднее.

" Каждый профиль - это отдельный ini-файл , в котором хранится информация о материале ".
Идея хранения данных в ini-файлах со временем уступает место другим идеям.


как бы xml и json это немного разные вещи. json это посути тот же ini текстовый файл.
а вот xml это уже строго структурированный файл, с xsd схемой описывающей его структуру.
естественно что у xml оверхед значительно больше чем у простых текстовых файлов, просто не надо считать что если вы открыли файл по F3 и видите его содержимое то все просто :)
И именно для обмена данными есть огромная разница между xml и json :)
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093864
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
YuRockВсе настройки должны быть в базе.

Ага. Причем сразу на Oracle, который живет на отдельном сервере.Особенно в этом случае.
Тогда пользователь перейдет на другой компьютер, и не заметит, и ничего настраивать не надо.
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093865
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
YuRockВсе настройки должны быть в базе.

... даже когда нет базы вообще 😃В этом случае функции базы выполняет инифайл, т.ч. всё укладывается в мою архитектуру
...
Рейтинг: 0 / 0
XML как альтернатива INI
    #40093868
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто технически можно.
JSON - модно + есть возможность создавать вложенные узлы, т.е. возможностей потенциально больше.

Но потом ручками редактировать будет сложновато, если оно, конечно, надо.
Я уже перешел на JSON + хранение в БД.
...
Рейтинг: 0 / 0
25 сообщений из 154, страница 1 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XML как альтернатива INI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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