Какие плюсы и минусы XML-парсера написаны полностью на Perl - PullRequest
2 голосов
/ 22 июля 2011

Каковы плюсы и минусы XML-парсера, полностью написанного на Perl для одного, обеспечивающего интерфейс только для парсера, такого как GNOME LibXML?

Ответы [ 3 ]

5 голосов
/ 22 июля 2011

На самом деле есть несколько; XML :: SAX :: PurePerl и XML :: Parser :: Lite например, но они медленные и неполные: в последний раз, когда я проверял XML :: SAX :: PurePerlвсе еще были некоторые ошибки, хотя вы, вероятно, не нашли бы их в реальной жизни, а XML :: Parser :: Lite должен только анализировать подмножество XML, используемое SOAP.

В любом случае большинство систем поставляются слибо expat, либо libxml2, поэтому на практике это не такая большая проблема, чтобы полагаться на внешние библиотеки.Даже в Windows expat включен как в Activestate Perl, так и в Strawberry Perl.

На самом деле синтаксический анализатор XML довольно сложен (вам нужно анализировать XML, но также и DTD, иметь дело с сущностями ...), так что нетнужно заново изобрести это конкретное колесо, кроме как для развлечений ^ Ужасные цели.

5 голосов
/ 22 июля 2011

Pro: Более переносимый и простой в установке (вам не нужно компилировать чистые модули Perl для библиотек C, они будут работать везде, где будет работать бинарный файл perl, вам не нужно иметь компилятор C и dev-библиотеки для ссылки, если вы хотите собрать их на произвольной машине).

Con: Pure Perl (или любой другой динамический язык) сравнительно медленный по сравнению с сильно оптимизированным C.

3 голосов
/ 25 июля 2011

Как указывал Мирод, неполнота иногда встречается среди минусов.

Если вам нужно проверить XML в соответствии со схемой XSD, ситуация может ухудшиться. Существуют модули, которые пытаются решить эту проблему, например XML :: Compile или XML :: Pastor , но вы должны быть терпимы к скорости.

Чтобы дать вам некоторые цифры, я расскажу о программе на Perl, которую я написал для проверки данных XML, которые должны соответствовать схеме. Моя программа использует XML :: Parser и MooseX :: Types , и для проверки XML-файла размером 5 МБ может потребоваться до 10 секунд.

С другой стороны,

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

выполняет ту же задачу за доли секунды.

Я вернул некоторую скорость (и память), используя VTD-XML на этапе синтаксического анализа, но все же мне нужно проверить данные с помощью Perl, потому что VTD-XML (до сих пор) не является проверяющим анализатором .

...