从S60设备解码WBXML SyncML消息

3
我正在尝试解码从Nokia N95发送的WBXML编码的SyncML消息。我的第一次尝试是使用python pywbxml模块,它将调用libwbxml进行封装。使用此方法解码消息会产生许多<unknown>标签和一个大块的二进制代码在<Collection>标签内。我尝试单独运行<Collection>的内容,但失败了。我是否漏掉了什么?
另外,有人知道纯Python实现的wbxml解析器吗?如果没有这样的工具,命令行或在线工具来解码这些消息也很有用--这将使我更容易编写自己的代码...
3个回答

1

有趣的是,我一直在解决同样的问题。我正在编写自己的纯Python WBXML解析器,但它还不完整,不能使用,而且我现在很少有时间来处理它。

<Unknown>标签可能是因为pywbxml / libwbxml没有加载正确的标签词汇表。WBXML通过索引号表示标签,以避免重复传输相同的标签名称数百次,并且将索引号映射到标签名称的表必须与WBXML文档本身分开提供。从对libwbxml源代码的粗略浏览中,似乎libwbxml有一堆硬编码的标签表。它有SyncML 1.0-1.2的表;我认为我的Nokia E71发送SyncML 1.3(如果是这样,你的N95可能也是),看起来libwbxml还不支持。

让它正常工作可能只要将SyncML 1.3表添加到libwbxml中就可以了。话虽如此,上次我尝试的时候,pywbxml不能对标准的libwbxml源代码进行编译,所以你需要先应用一些补丁...因此,“简单”可能是一个相对的术语。


1
我最后自己写了一个Python解析器。我成功地通过遵循这里的规范http://www.w3.org/TR/wbxml/来完成它。
然后从horde.org cvs中取出代码表。
开放移动联盟(Open Mobile Alliance)的网站和文档太糟糕了,这是一个非常棘手的项目:(

0

我使用了pywbxml, 只需要在pywbxml.pyx中进行一个补丁:

wbxml2xml函数中的params.lang第25行左右设置为:

params.lang = WBXML_LANG_UNKNOWN

运行得非常好。还将WBXMLParseError的基础类更改为exception有所帮助:

class WBXMLParseError(Exception):

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接