Perl-XML

From PostgreSQL 中文维基, PostgreSQL 中文站, PostgreSQL 中国社区, PostgreSQL Chinese community

Jump to: navigation, search
  • 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()"
Personal tools