LINUX.ORG.RU

Конвертировать INI в XML.


0

0

Знаю Python и C++, задача - перевести INI файл в XML. Трудность в наличии комментариев в INI. Там перед каждым параметром несколько строк, начинающихся с «//» в качестве комментария для данного параметра. Структура XML простая. Есть какая-нибудь библиотека для Python, которая может комментарии из INI доставать? И какая-нибудь библиотека, которая может записывать XML с комментариями в любом месте?

Можно для C++ то же самое.

Спасибо!

★☆

Последнее исправление: kiverattes (всего исправлений: 1)
Ответ на: комментарий от anonymous

Какой ужас.

1) Зачем нам DOM? нам SAX генерации в разы удобнее..

2) Вам не лень писать было? Тот пример что написал я с проверками на всё займет в три раза меньше строк.

demmsnt
()
Ответ на: комментарий от demmsnt

1) Зачем нам DOM? нам SAX генерации в разы удобнее..

На шарпе проще DOM сделать.

2) Вам не лень писать было?

Нет :)

Тот пример что написал я с проверками на всё займет в три раза меньше строк.

Ну так напиши полный код.

// NightmareZ

anonymous
()
Ответ на: комментарий от anonymous

Я не совсем понимаю, чего ты хочешь.

По какой грамматике ты разбираешь? Комментарии ассоциированы с парами name ~ value и секциями?

; Q1

; Q2
[Section1] ; Section1
; Q3
a = 1 ; Bind1
; Q4
b = 2 ; Bind2
; Q5

К чему отнести комментарии Q1, Q2, Q3, Q4 и Q5?

И ещё порядок секций, вроде, теряется. Если так, то список пар name = value тоже можно сделать словарём (но тогда вообще не понятно как сохранять структуру комментариев).

Можно взять за основу такой EBNF:

ini     = element , [ini]
element = comment | section | binding

comment = spaces , ";" , ... , "\n"
section = "[" , name , "]" , [comment]
binding = spaces , name , spaces , "=" , spaces, value , [comment]

name    = ...
value   = ...
spaces  = ...

для любого генератора парсеров. И уже из этого линейного представления сворачивать в XML или делать словарь секция ~ (словарь имя ~ значение) (если нужны эффективные выборки).

quasimoto ★★★★
()
Ответ на: комментарий от demmsnt

А вот мне влом...

Кстати, вот только сейчас об этом подумал: SAX тут не особо подойдёт хотя бы по той причине, что секции с одинаковыми именами объединяются в одну. Например,

[section1]
a=a
[section2]
b=b
[section1]
c=c
сконвертируется в
<section name="section1">
  <item name="a">a</item>
  <item name="c">c</item>
</section>
<section name="section2">
  <item name="b">b</item>
</section>
Секции, само собой, могут быть раскиданы по всему файлу.

А ещё есть массивы элементов. Например,

a[] = a
a[] = b
; bla-bla-bla
a[] = c
сконвертируется в
<array name="a">
  <item>a</item>
  <item>b</item>
  <item>c</item>
</array>
Понятно, что элементы могут, опять таки, быть разбросаны чёрти где (в пределах одной секции, разумеется).

// NightmareZ

anonymous
()
Ответ на: комментарий от quasimoto

К чему отнести комментарии Q1, Q2, Q3, Q4 и Q5?

Q1, Q2, Section1 - к [Section1] Q3, Bind1 - к a = 1 Q4, Bind2 - к b = 2 а вот Q5 - ни к чему

И ещё порядок секций, вроде, теряется.

Да. Это фича, которая следует из того, что одноимённые секции объединяются в одну.

// NightmareZ

anonymous
()
Ответ на: комментарий от anonymous

Q1, Q2, Section1 - к [Section1] Q3, Bind1 - к a = 1 Q4, Bind2 - к b = 2 а вот Q5 - ни к чему

Такой вариант тоже может быть - Q1 и Q2 - к самому ini файлу, Section1 - к [Section1] как к имени секции, Q3, Q4 и Q5 - к [Section1] как к секции, Bind1 и Bind2 - к своим биндингам. В зависимости от того, что предполагал пользователь. В общем случае можно только сказать, что ini это список комментариев, названий секций (+ возможный коммент) и биндингов (+ возможный коммент).

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

Такой вариант тоже может быть

Ну ты у меня спросил, как у меня реализовано - я тебе ответил :) Нормальное Т.З., если я не ошибаюсь, топикстартер так и не предоставил.

// NightmareZ

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.