2010-09-17 42 views
23

我在嵌入式项目中使用了非常小的XML解析器。它需要编译到10-15k,不需要验证,并且需要简单和便携。嵌入式C项目是否有一个很好的小XML解析器?

+2

类似于[ C嵌入式系统的XML库 ](http://stackoverflow.com/questions/1131701/c-xml-library-for-embedded-systems),虽然我没有看到任何好的答案。 – 2010-09-17 22:27:23

+1

XML是绝对需求吗? 15k非常紧密,因为您不需要手动滚动以满足您的需求,但是如果您找不到那种非常小的现成JSON解析器,我会感到惊讶。 – llasram 2010-09-18 15:44:47

+1

嗨llasram,谢谢你的评论。是的,XML是一项要求。我最终解决了自己的问题:手动滚动符合我要求的XML解析器。由此产生的代码只有几K ...但是当我仔细研究它们时,我的XML解析要求变得相当简单。 – Joe 2010-09-20 17:06:18

回答

5

您可以随时推出自己的实施。几年前我做了这个,现在刚刚在代码mercurial.intuxication.org/hg/cstuff处添加了一些接口文档。

请注意,解析器从未在生产环境中使用过,甚至没有经过过多的基本测试;评论也是不存在的,所以如果你需要修改代码,请尽情发挥代码的作用;)

+0

谢谢克里斯托弗。这正是我最后所做的一切,我自己实施。我在你的帖子之前实际执行了它,但是无论如何感谢 - 我会看看你的实现,并与我自己的实现进行比较。 – Joe 2010-09-20 17:04:25

+0

@Christoph,这看起来正是我在找的东西 - 感谢您发布! – mikepurvis 2012-09-15 13:48:05

6

我在搜索一个最近,我发现了SimpleXML(http://simplexml.sourceforge.net/)和稍大sxmlc(http://sourceforge.net/projects/sxmlc/

我发现SimpleXML的更有趣,因为它更简单,我没有尝试,但看起来它符合我心目中,一单个文件(以及.h和.c)库不支持异国情调的XML功能。

简单的XML解析器是XML子集的一个小解析器(除了实体和名称空间之外的所有东西)。它使用简单的“每个标签一个处理程序”界面,适用于资源有限的设备。

1

我开发了sxmlc(“C中的简单XML”),就像这样:尽可能少的文件。它只有一个文件,如果您需要通过文档进行类似XPath的搜索,则可以添加一个可选的“搜索”文件。

它处理DOM风格加载(内存中的整个文档树)或SAX风格的加载(每当读取节点的属性或在节点上读取文本时调用回调函数)。如果记忆是一个问题,你会对SAX感兴趣。

有些人还对它可以解析文件或内存缓冲区这一事实感兴趣(当您将XML作为Web回复时很有用)。

它处理自版本4到#define以来的Unicode文件,因此如果您不需要Unicode,只需不定义SXMLC_UNICODE,二进制文件中不会有任何权重增加。

我也不得不说它保留评论当写回XML到磁盘!当人们花时间在XML文件中解释配置语法(“put'true'以启用特殊压缩...”)时,我总是感到抱歉,这些文件在应用程序保存后会被擦除。

它在Linux和Windows下编译。我很高兴地将它嵌入到路由器中,我得到了很好的反馈。因为我想尽可能保持简单,所以我可能不会添加新的功能,而是改进现有的功能(并纠正错误,当然!:))。除非有错误报告,否则我的研发活动并不十分活跃。

4

尝试yxml - 这是一个非常小而且快速的非验证解析器。