Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XML как альтернатива INI / 25 сообщений из 154, страница 1 из 7
29.08.2021, 17:08
    #40093684
Damir_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML как альтернатива INI
Здравствуйте.
Хотел спросить, может ли xml-файл служить альтернативой ini-файлам? У меня имеется программа которая использует профили материалов. Каждый профиль - это отдельный ini-файл , в котором хранится информация о материале. Я просто с xml еще не работал. Можно ли например все профили хранить в одном xml-файле, т.е. получается своего рода база данных, а потом считывать обращаясь к секциями выбранного материала для загрузки его параметров?
...
Рейтинг: 0 / 0
29.08.2021, 17:31
    #40093685
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML как альтернатива INI
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
29.08.2021, 17:37
    #40093689
Damir_85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML как альтернатива INI
s62,
спасибо. Да , думаю что нужно в моём случае использовать первый тип, т.к. файлов в целом по статистике накапливается немного, ну штук 8-10 максимум, да и секций в каждом штук 6-7. Так что копейки все это весит по информации. Да, конечное еще с этим форматом мне предстоит разбираться, что к чему)
...
Рейтинг: 0 / 0
29.08.2021, 18:23
    #40093693
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML как альтернатива INI
Лучше сразу на json переходи.

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

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

Нет, нельзя.
...
Рейтинг: 0 / 0
29.08.2021, 20:24
    #40093700
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML как альтернатива INI
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
29.08.2021, 20:53
    #40093702
sasha27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML как альтернатива INI
Damir_85
Здравствуйте.
Хотел спросить, может ли xml-файл служить альтернативой ini-файлам? У меня имеется программа которая использует профили материалов. Каждый профиль - это отдельный ini-файл , в котором хранится информация о материале. Я просто с xml еще не работал. Можно ли например все профили хранить в одном xml-файле, т.е. получается своего рода база данных, а потом считывать обращаясь к секциями выбранного материала для загрузки его параметров?


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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