Всем привет. Давно не писал на C#, но для текущего домашнего проекта он мне подходит лучше всего, в связи с этим возникло желание сделать кроссплатформенную софтинку (хочется чтоб работало не только в windows-е, но и в Linux-е).
С графикой всё просто - avalonia ui. Но возник вопрос, чем парсить xml (знаю про 3 варианта 2 DOM 1 SAX System.Xml - это то что я когда-то даже использовал, когда альтернатив особо не было, LINQ to XML это то что посвежее на практике не использовал, но видел как используют другие люди, вроде заявлено что пользоваться им проще, да и выглядит оно поудобнее и наконец XmlReader). У меня всё бы просто было, но мне очень хочется парсить быстро (надо переварить 1 террабайт xml файлов, желательно за приемлемое время, т.к. задача по перевариванию такого объёма не разовая, одиночные файлы не очень большие, 10 мегабайт, наверное самый большой будет, но их очень и очень много). Потому хочется услышать у опытных в парсинге XML товарищей что лучше брать. (если бы была проблема с большими файлами то понятно что у XmlReader-а не было бы альтернатив, но тут много мелких файлов и потому оперативку не жалко, всё упирается в скорость чтения с диска и асинхронщину скорее всего). Да, чтоб было понятнее, у моего файла структура примерно такая
<SuperPuperTag somekey="abracadabra" somekey:ggwp="eazy"><tag1>...</tag1><tag2>...</tag2>...<tagN>...</tagN></SuperPuperTag>
и по факту меня интересуют только те теги что между <tag1>...</tag1> и <tagN>...</tagN>, т.е. весь файл разбирать в дерево особо толку нет - это лишние действия, так что может и там можно ускориться, взяв XmlReader, но наверное, стоит протестировать есть ли в этом смысл.
Второй вопрос возник с неймспейсами в xml. Честно скажу сложные xml мне не доводилось парсить, обычно были json-ы или простые xml, а в данном случае авторы формата файлов немного извращенцы, и потому сделали такую конструкцию:
<SuperPuperTag somekey="abracadabra" somekey:ggwp="eazy">...</SuperPuperTag>
мне оттуда бы вытаскивать ggwp, потому что оно в разных файлах бывает разным и от этого зависит что это за файл и как с ним дальше работать. Привязаться по факту я могу только к eazy и уникальному названию тега SuperPuperTag. Это фиксированные значения. В связи с этим хотелось бы узнать как наиболее правильно извлекать префикс неймспейса по значению. Потому что сколько я не гуглил все варианты всё равно приходят к тому, что привязываются к LINQ to XML и новым (ну как новым 10+ лет в проде) версиям дотнета (в линуксе же оно работает по идее?).