есть ли подобная библиотека к simplejson, который включил бы быструю сериализацию данных к и от XML.
e.g. json.loads('{vol:'III', title:'Magical Unicorn'}')
e.g. json.dumps([1,2,3,4,5])
Какие-либо идеи?
Вы можете посмотреть, как они это сделали в Django: xml_serializer.py и адаптируйте его под свои нужды.
Это не так просто с xml, как с json, потому что между типами данных xml и python нет "сопоставления типов". Данные XML могут быть любыми, как они отображены в соответствующем XSL.
Что касается API, о котором вы в основном беспокоитесь, я рекомендую Element Tree
За хорошим учебником по разбору XML с помощью Element Tree я отсылаю вас к Mark Pilgrim's Dive into Python3
Я не знаю ни одного. Если только xmlrpc не считается... На случай, если вы думаете о создании своего собственного: ElementTree - это удовольствие, по сравнению с большинством других библиотек XML.
Но, поскольку в итоге вы, вероятно, получите нестандартизованное представление, вам нужно будет контролировать обе стороны, верно? Тогда почему бы просто не выбрать json, pickle или что-то, что уже есть?
На случай, если вы хотите использовать модуль xmlrpclib:
xmlrpclib.dumps(data)
Forest упоминает ограничения в xmlrpclib, что является хорошим замечанием. Некоторые из них я видел сам: Целое число не может быть больше, чем 2^31-1, иначе библиотека будет жаловаться. Значения "None" обычно не подходят, но это можно обойти. Возможно, есть и другие ограничения.
Кроме того, xmlrpc-протокол довольно многословен. Если вам нужно беспокоиться о том, сколько данных будет отправлено, это не лучший вариант. Но ни одна XML-версия не будет очень эффективной.
Вы не найдете для 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'},)
>>>