Декодирование сообщения WBXML SyncML с устройства S60 - PullRequest
3 голосов
/ 22 октября 2008

Я пытаюсь декодировать закодированное в WBXML сообщение SyncML от Nokia N95. Моей первой попыткой было использование модуля python pywbxml, который оборачивает вызовы в libwbxml. Декодирование сообщения с этим дало много тегов и большой кусок двоичного файла в теге . Я попытался запустить содержимое самостоятельно, но это не удалось. Я что-то упускаю?

Кроме того, кто-нибудь знает о чистой реализации на Python парсера wbxml? Если бы не была полезна командная строка или онлайн-инструмент для декодирования этих сообщений - мне было бы намного легче написать свое собственное ...

Ответы [ 3 ]

1 голос
/ 11 ноября 2008

Я закончил тем, что написал парсер Python самостоятельно. Мне удалось сделать это, следуя спецификации здесь: http://www.w3.org/TR/wbxml/

А затем взять таблицы кодов из резюме horde.org.

Сайт и документация открытого мобильного альянса ужасны, это был очень трудный проект: (

1 голос
/ 23 октября 2008

Как ни странно, я работал над той же проблемой. Я на полпути к написанию моего собственного анализатора WBXML на чистом Python, но он еще не закончен, чтобы быть полезным, и у меня очень мало времени для работы над ним прямо сейчас.

Эти теги могут быть связаны с тем, что в pywbxml / libwbxml не загружен словарь правильных тегов. WBXML представляет теги с помощью номера индекса, чтобы не передавать сотни раз одно и то же имя тега, и таблица, которая отображает номера индекса с именами тегов, должна предоставляться отдельно от самого документа WBXML. С туманного взгляда на источник libwbxml кажется, что libwbxml имеет жестко закодированную кучу таблиц тегов. Есть таблицы для SyncML 1.0-1.2; Я думаю, что мой Nokia E71 отправляет SyncML 1.3 (если это так, вероятно, ваш N95 тоже), что, похоже, libwbxml пока не поддерживает.

Чтобы заставить его работать, может быть так же просто, как добавить таблицу SyncML 1.3 в libwbxml. Тем не менее, в прошлый раз, когда я пытался, pywbxml не компилируется с исходным исходным кодом libwbxml, поэтому вы должны сначала применить некоторые патчи ... так что "простой" может быть относительным термином.

0 голосов
/ 01 декабря 2009

Я использовал pywbxml , Просто нужен один патч в pywbxml.pyx:

params.lang в функции wbxml2xml вокруг строка 25 установлена ​​на:

params.lang = WBXML_LANG_UNKNOWN

работает как шарм. Также помогает изменение базового класса для WBXMLParseError на исключение:

class WBXMLParseError(Exception):
...