【问题标题】:What are the Pros and Cons of a XML-Parser written completely in Perl完全用 Perl 编写的 XML 解析器的优缺点是什么
【发布时间】:2011-10-11 04:19:04
【问题描述】:

完全用 Perl 编写的 XML-Parser 与只为像 GNOME 的 LibXML 这样的 Parser 提供接口的优点和缺点是什么?

【问题讨论】:

    标签: xml perl parsing libxml2


    【解决方案1】:

    专业版:更便携且更易于安装(您不需要针对 C 库编译纯 Perl 模块,它们可以在 perl 二进制文件运行的任何地方运行,您不需要 C 编译器和如果您想在任意机器上构建它,则需要链接的 dev- 库)。

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

    【讨论】:

      【解决方案2】:

      其实有几个;例如XML::SAX::PurePerlXML::Parser::Lite,但它们既慢又不完整:我上次检查 XML::SAX::PurePerl 时仍然有一些错误,尽管您可能在现实生活中找不到它们,而 XML:: Parser::Lite 应该只解析 SOAP 使用的 XML 子集。

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

      XML 解析器实际上非常复杂(您需要解析 XML,还需要解析 DTD,处理实体......)所以没有必要重新发明这个特定的轮子,除了娱乐^W学习目的。

      【讨论】:

      • 来自您的帖子:“所以没有必要重新发明这个特定的轮子...”如果只是在每页第一页的第一段中编程书,Perl 或其他。然后我们只需要鼓励人们偶尔破解一本书。 ;)
      【解决方案3】:

      正如 mirod 所指出的,不完整有时是缺点。

      如果您必须根据 XSD 架构验证 XML,情况可能会变得更糟。 有一些模块试图解决这个问题,例如XML::CompileXML::Pastor,但您必须对速度有所容忍。

      为了给您一些数字,我将讨论我编写的一个 Perl 程序,用于验证必须符合模式的 XML 数据。我的程序使用 XML::ParserMooseX::Types,并且可能需要 10 秒来验证 5 MiB 的 XML 文件。

      另一边,

      xmllint --schema /path_to/schema.xsd data.xml
      

      在几分之一秒内完成相同的任务。

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

      【讨论】:

        猜你喜欢
        • 2010-10-03
        • 2011-03-10
        • 2011-12-03
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2010-09-08
        相关资源
        最近更新 更多