我正试图在Go中从头开始创建一个XMPP库(以及后来的服务器)(尽管语言本身是无关紧要的),作为一种学习XMPP协议和服务器软件开发的方法.
正如你们许多人所知,XMPP是基于XML的消息传递协议,它依赖于大量短而频繁的XML流.我认为对于这样的应用程序,基于事件的XML解析器应该更好,因为我不需要DOM和所有这些(如果我错了,请纠正我).请记住,此库适用于服务器,因此可能会同时运行多个实例;
对于该用例libxml2或expat,两者中哪一个具有更好的性能和内存使用?
我必须阅读一些非常繁重的XML文件(介于200 MB和1 GB之间),对于其中一些文件来说,这些文件无效.让我举个小例子:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<item>
<title>Some article</title>
<g:material><ul><li>50 % Coton</li><li>50% Lyocell</li></g:material>
</item>
</rss>
Run Code Online (Sandbox Code Playgroud)
显然,</ul>标签中缺少结束g:material标签.此外,开发此Feed的人应该将封闭的g:material内容放入CDATA其中,但他们没有...基本上,这就是我想要做的事情:添加这个缺失的CDATA部分.
我曾尝试使用SAX解析器来读取此文件,但在读取</g:material>标记时失败,因为</ul>标记丢失.我尝试过使用XMLReader,但基本上遇到了同样的问题.我可以用DomDocument :: loadHtml做一些事情,但是这个文件的大小与DOM方法并不真正兼容.您是否知道我如何才能简单地修复此Feed而无需为DomDocument购买大量内存来运行?谢谢.