2008-11-26 2 views
3

Мне нужно проверить XML-агаст схемы.Есть ли модуль Perl, который проверяет XML на схему?

Я пробовал XML :: SAX :: ParserFactory; XML :: Validator :: Схемы и связанные с ними модули, но похоже, что они ограничены.
Ограниченный в том смысле, что он не распознает элементы схемы, такие как xsd: unique, xsd: group, xsd: keyref, xsd: union и xsd: key.

Являются ли эти xsd: уникальными и т. Д. Новыми дополнениями?

Оцените, можете ли вы указать мне некоторые модули Perl, которые соответствуют дате и задаче.

Заранее спасибо.

ответ

2

Вы пробовали проверить его с помощью xmllint?

+0

Инструмент командной строки xmllint работает очень хорошо. Спасибо JDrago! – Thushan 2008-11-27 15:37:20

10

Посмотрите XML::LibXML

Это использует высоко оцененного библиотеки libxml2, которые большинство людей процитировать в качестве преемника Expat и модулей на основе XML::Parser.

Для проверки схемы смотрите на XML::LibXML::Schema

use XML::LibXML; 
use XML::LibXML::Schema; 

my $schema = XML::LibXML::Schema->new(location => 'file.xsd'); 
my $parser = XML::LibXML->new; 

my $xml = 'file.xml'; 
my $doc = $parser->parse_file($xml); 

eval { $schema->validate($doc) }; 
die [email protected] if [email protected]; 

say "$xml is valid\n"; 

NB. Я по-прежнему в основном является пользователем XML::Twig и практически не касаюсь XML-схемы, поэтому я не знаю, разрешит ли XML :: LibXML :: Schema проблему, но у вас есть лучшее решение для CPAN для ваших нужд.

1

@Thushan Вам абсолютно необходимо использовать Perl? Если нет, то почему бы не попробовать до XMLSTARLET? Это довольно хороший инструментарий для управления XML-терминалами в терминале!

Он поддерживает не только устаревшие DTD и XSD по мере необходимости, но также поддерживает схемы Relax-NG. Проверьте его документацию, чтобы узнать, как Validate XML Documents with xmlstarlet Надеюсь, это вам поможет;)

Удачного дня!

PD О, я вижу, вы использовали xmllint! Это тоже здорово, но я предпочитаю xmlstarlet =) Попробуйте;)

+0

Хорошая вещь о `xmllint` заключается в том, что она использует ту же библиотеку, что и XML :: LibXML, поэтому, когда я хочу сделать что-то более сложное, чем одна команда« xmllint », я могу легко переключиться на Perl. Я использую `xmlstarlet` для простых преобразований XML. – reinierpost 2014-05-27 09:25:37

Смежные вопросы