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

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

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

36 ответов

8 просмотров

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

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".

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

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

тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
читать файл максимально быстро? странный вопрос))
zamtmn
53
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Карта сайта