完全用Perl编写的XML解析器的优缺点是什么

完全用Perl编写的XML解析器的优缺点是什么,xml,perl,parsing,libxml2,Xml,Perl,Parsing,Libxml2,完全用Perl编写的XML解析器只为GNOME的LibXML之类的解析器提供接口,其优缺点是什么(您不需要针对C库编译纯Perl模块,它们将运行Perl二进制文件将运行的任何地方,如果您想在任意机器上构建它,您不需要有C编译器和开发库来链接) 缺点:纯Perl(或任何动态语言)与高度优化的C相比,它的运行速度相对较慢。实际上有一些;例如,它们都很慢而且不完整:我上次检查XML::SAX::PurePerl时仍然存在一些错误,尽管您可能在现实生活中找不到它们,而XML::Parser::Lite应

完全用Perl编写的XML解析器只为GNOME的LibXML之类的解析器提供接口,其优缺点是什么(您不需要针对C库编译纯Perl模块,它们将运行Perl二进制文件将运行的任何地方,如果您想在任意机器上构建它,您不需要有C编译器和开发库来链接)

缺点:纯Perl(或任何动态语言)与高度优化的C相比,它的运行速度相对较慢。

实际上有一些;例如,它们都很慢而且不完整:我上次检查XML::SAX::PurePerl时仍然存在一些错误,尽管您可能在现实生活中找不到它们,而XML::Parser::Lite应该只解析SOA使用的XML子集P

在任何情况下,大多数系统都带有expat或libxml2,因此在实践中依赖外部库似乎不是什么大问题。即使在Windows上,expat也包含在Activestate Perl和草莓Perl中


XML解析器实际上相当复杂(您需要解析XML,还需要解析DTD,处理实体…),因此,除了娱乐和学习目的之外,不需要重新发明这个特定的轮子。

正如mirod指出的,不完整性有时是缺点之一

如果必须根据XSD模式验证XML,情况可能会变得更糟。 有一些模块试图解决这个问题,比如,或者,但是你必须在速度上保持宽容

为了给您一些数字,我将介绍我编写的一个Perl程序,该程序用于验证必须符合模式的XML数据

另一方面,

xmllint --schema /path_to/schema.xsd data.xml
在几分之一秒内完成同样的任务

我在解析阶段恢复了一些速度(和内存),但我仍然必须用Perl验证数据,因为VTD-XML(仍然)不是一个验证解析器。

来自您的帖子:“所以没有必要重新发明这个特定的轮子…”如果每本编程书的第一页的第一段都有这样的内容,不管是Perl还是其他,那么我们就只需要鼓励人们偶尔阅读一本书