Библиотека XML похожа на simplejson / json? - питон - PullRequest
5 голосов
/ 08 июня 2010

есть библиотека, подобная simplejson, которая позволила бы быструю сериализацию данных в и из XML.

e.g. json.loads('{vol:'III', title:'Magical Unicorn'}')

e.g. json.dumps([1,2,3,4,5])

Есть идеи?

Ответы [ 5 ]

3 голосов
/ 08 июня 2010

Вы можете посмотреть, как они сделали это в Django: xml_serializer.py и адаптировать его под свои нужды.

3 голосов
/ 08 июня 2010

Вы не найдете ничего для xml столь же непротиворечивого, как json, потому что xml не знает о типах данных. От вас зависит соблюдение соглашений или обеспечение соблюдения схемы XML-файла.

При этом, если вы готовы принять отображение структуры данных XML-RPC и некоторые ограничения, ознакомьтесь с пакетом xmlrpclib, который находится в стандартной библиотеке Python:

http://docs.python.org/library/xmlrpclib.html#convenience-functions

>>> import xmlrpclib
>>> s = xmlrpclib.dumps( ({'vol':'III', 'title':'Magical Unicorn'},))
>>> print s
<params>
<param>
<value><struct>
<member>
<name>vol</name>
<value><string>III</string></value>
</member>
<member>
<name>title</name>
<value><string>Magical Unicorn</string></value>
</member>
</struct></value>
</param>
</params>

>>> xmlrpclib.loads(s)[0]
({'vol': 'III', 'title': 'Magical Unicorn'},)
>>> 
2 голосов
/ 08 июня 2010

С xml все не так просто, как с json, потому что между типами данных xml и python нет «отображения типов». Данные Heck XML могут быть любыми, как показано в соответствующем XSL.

Что касается API, который вас больше всего беспокоит, я рекомендую Element Tree

Для хорошего учебника по синтаксическому анализу XML с использованием Element Tree я отсылаю вас к Марк Пилигрим Dive into Python3

2 голосов
/ 08 июня 2010

Я не знаю ни одного. Если xmlrpc не считается ... Если вы думаете о том, чтобы катиться самостоятельно: делать что-либо с ElementTree приятно, по сравнению с большинством других библиотек XML.

Но, поскольку вы, вероятно, в конечном итоге получите представление, которое будет нестандартным, вам нужно будет контролировать обе стороны, верно? Тогда почему бы просто не выбрать json , pickle или что-то, что уже есть?

Если вы хотите использовать модуль xmlrpclib:

xmlrpclib.dumps(data)

Форест упоминает ограничения в xmlrpclib, что является хорошим моментом. Некоторые, которые я видел сам: целых чисел не может быть больше 2 ^ 31-1, иначе библиотека будет жаловаться. «Нет» значения, как правило, не в порядке, но вы можете обойти это. Возможно, есть и другие ограничения.

Кроме того, xmlrpc-протокол довольно многословен. если вам нужно беспокоиться о том, сколько данных отправлено, это не самый лучший. Но ни одна версия XML не будет очень эффективной.

1 голос
/ 08 июня 2010

А как насчет lxml ?

...