Perl-XML
From PostgreSQL 中文维基, PostgreSQL 中文站, PostgreSQL 中国社区, PostgreSQL Chinese community
- XML::Simple 是最上面的包装
用这样的方式来选
$XML::Simple::PREFERRED_PARSER="XML::SAX::Expat";
- 默认情况下,XML::Simple 会使用 XML::Parser 进行 Parse ,这个 Parse 会把 XML 中的 utf-8 转换为 perl 内部格式。
- XML::SAX 是 SAX 解析的一个包装,它底层有 PurePerl 和 Expat 两个驱动
- XML::SAX::ExpatSX 号称很快,不过装上无法用
- XML::SAX::Expat 用 expat 进行 parse ,也会把 utf-8 转换为 perl 内部各式
- XML::SAX::PurePerl 转换速度最慢,不过它不会把 utf-8 进行转换
- XML::SAX 根据 ParserDetails.ini 选择底层世纪的 driver,ParserDetails.ini 文件的内容如下:
luoyi@office:~/src/is/trunk/perlext/RssTools$ cat /usr/lib64/perl5/site_perl/5.8.8/XML/SAX/ParserDetails.ini [XML::SAX::PurePerl] http://xml.org/sax/features/namespaces = 1 [XML::SAX::Expat] http://xml.org/sax/features/namespaces = 1 http://xml.org/sax/features/external-general-entities = 1 http://xml.org/sax/features/external-parameter-entities = 1 [XML::LibXML::SAX::Parser] http://xml.org/sax/features/namespaces = 1 [XML::LibXML::SAX] http://xml.org/sax/features/namespaces = 1 [XML::SAX::ExpatXS] http://xml.org/sax/features/external-general-entities = 1 http://xml.org/sax/features/external-parameter-entities = 1 http://xmlns.perl.org/sax/recstring = 1 http://xmlns.perl.org/sax/locator = 1 http://xml.org/sax/features/xmlns-uris = 1 http://xmlns.perl.org/sax/ns-attributes = 1 http://xml.org/sax/features/namespaces = 1 http://xmlns.perl.org/sax/version-2.1 = 1 http://xmlns.perl.org/sax/xmlns-uris = 1 http://xmlns.perl.org/sax/join-character-data = 1
- XML::SAX::Expat 包装上以后,需要调用类似这样的命令,将其“注册”到 ParserDetails.ini 中:
$ perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()"
