170 похожих чатов

Во, раз уж тут обсуждают архитектурные излишества... Как логичнее всего

построить структуру данных для софтины, ворочающей xml-файл, если мы знаем только о части хранящихся в нём данных?

36 ответов

23 просмотра

строить структуру данных исходя из известных данных, рядом иметь процедуры по их вытягиванию из файла

evle- Автор вопроса
Denis Pobedrya
строить структуру данных исходя из известных данны...

Ну, данные, которые нам не интересны, в итоговом файле после обработки нами нужно сохранить. Причём иногда ещё сделать с ними что-то.

Знаем часть данных, и что? Это мешает как-то?

evle
Ну, данные, которые нам не интересны, в итоговом ф...

Я как-то писал потоковую читалко-писалку xml

evle- Автор вопроса
Pavel Павлик
Знаем часть данных, и что? Это мешает как-то?

Это не даёт построить адекватно модели. Мы не знаем до конца, какие там могут быть теги, атрибуты и прочее.

Tishka17
xmpp?

yml, который не ямл, а который яндексовый товарофид

evle
Это не даёт построить адекватно модели. Мы не знае...

Я не понял, вы знаете только часть схемы xml-файла или у вас нет конкретной схемы для файла?

evle
Это не даёт построить адекватно модели. Мы не знае...

А какие операции вообще будут с данными? Вот приходит хмл-ка, и дальше что? :)

evle- Автор вопроса
Pavel Павлик
Я не понял, вы знаете только часть схемы xml-файла...

М... Чуть больше контекста. Есть некий описанный схемой и прочим формат, который пользователи должны заполнять и подавать на вход числодробилке, которая его знает целимом. Формат жутко многоловный и кроме того не всем все операции можно делать. Поэтому есть производный от него упрощённый формат. Наша задача сконвертировать одно в другое, повалидировать, сделать какие-то специфические для нас вещи. Нюанс в том, что полной спецификации исходного формата у нас нет (и в общем целиком он нам не требуется). Часть тегов и аттрибутов из упрощённого просто должны быть перенесены в итоговый файл.

evle
М... Чуть больше контекста. Есть некий описанный ...

Самый лучший способ сохранить xml как есть это… сохранить его как xml, потоком байт, в блоб там или в файл

evle- Автор вопроса
Denis Pobedrya
Самый лучший способ сохранить xml как есть это… со...

Не, с сохранить нет вопросов. Вопросы с тем, как с этим работать. Грубо говоря, обработки могут быть такого плана: <Container><Element a="1" b="2"><Filter>...</Filter></Element></Container> Наша задча тут — найти все Element, посмотреть в Filter внутри, подёргать базу данных по запросу из Filter и каких-то атрибутов Element, получить оттуда список подходящего и сгенерировать такое: <Container><Element a="1" b="2" с="5" d="6"></Element><Element a="1" b="2" с="7" d="8"></Element></Container> c и d придут из базы, остальное переносится из исходного элемента. Беда, собственно, в том, что мы не очень в курсе, какие атрибуты вообще могут быть и какие у них возможные значения.

evle
Не, с сохранить нет вопросов. Вопросы с тем, как с...

Если файл помещается в память — читаем в какой-нибудь lxml.etree, манипулируем данными про которые знаем, дампаем

evle- Автор вопроса
Pavel Павлик
Надо выяснить, иначе код не напишешь

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

evle
Там сотни атрибутов и потенциальных комбинаций, ко...

Я не понимаю вообще. Схему меняют постоянно?

evle- Автор вопроса
Denis Pobedrya
Если файл помещается в память — читаем в какой-ниб...

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

evle
Вот от одного гигантского ElementTree и хочется из...

Если программа сложна для понимания, то от написания 100500 моделей про чужой формат за которыми надо следить она понятнее не станет

evle- Автор вопроса
Denis Pobedrya
Если программа сложна для понимания, то от написан...

Именно что хочется сделать модели для того, с чем мы непосредственно работать и какой-нибудь extra_attributes: dict для того, на что нам пофиг.

evle
Именно что хочется сделать модели для того, с чем ...

сделайте, но вместо extra_attributes пусть будет исходная хмл-ка как есть, строкой

evle- Автор вопроса
Denis Pobedrya
сделайте, но вместо extra_attributes пусть будет и...

Ну, строка тут не спасёт. Вложенности дофига.

evle
Ну, строка тут не спасёт. Вложенности дофига.

ну хранить не куски напротив каждого аттрибута, а один раз исходный документ

evle- Автор вопроса
evle
Бр. А дёргать потом нужное из него как?

вот то что вам нужно xpath'ом достаньте и схороните уже в базу или куда вам там удобнее

evle
Там сотни атрибутов и потенциальных комбинаций, ко...

Объясни, почему работать с постоянно изменяющейся схемой без датаклассов реально, а с датаклассами — нет?

evle- Автор вопроса
Pavel Павлик
Объясни, почему работать с постоянно изменяющейся ...

Вопрос не в датаклассах как таковых а в классах в целом. Допустим, пришёл на вход тег: <Constants value1="1" value2="3" wtf="random_stuff"> На value1 и value2 у нас завязано куча расчётов по остальному документу, а что такое wtf — мы вообще не знаем и нам даже никто не сообщил, что его добавили, но сообщили пользователям, и в конечном xml это значение должно сохраниться. Мы делаем @dataclass class Constants: value1: int value2: int Куда нам запихнуть wtf?

evle
Вопрос не в датаклассах как таковых а в классах в ...

@dataclass class Constants: value1: int value2: int extra: dict[str, str]

evle- Автор вопроса
denis
NotRequired[wtf_type]

Мы не знаем, какие поля вообще есть, чтобы так писать.

evle- Автор вопроса
Tishka17
unknown: Dict[str, Any]

Вот что-то такое и думаю сделать в итоге. Но вопрос — как потом переводить их в известные, когда придёт тз "а вы знаете, мы тут добавили атрибут something, можно вы будете проверять, что он используется только совместно с такими-то тегами в другом углу xml".

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта