使用libxml和XSD文件验证Perl中的XML

时间:2010-08-03 17:59:40

标签: xml perl xsd xml-validation xml-libxml

我试图让我的perl脚本从在线获取Xxml文件并根据XSD文件进行验证。

执行此操作的代码如下:

my $url = shift @ARGV;
my $response = $ua->get($url) || die "Can't fetch file";
my $file = $response->content;

my $schema_file = "schema.xsd";
my $schema = XML::LibXML::Schema->new(location => $schema_file);
my $parser = XML::LibXML->new;
my $doc    = $parser->parse_string($file);
eval { $schema->validate($doc) };
die $@ if $@;

运行此操作会导致一个神秘的错误:“元素cropdata内容检查失败”(cropdata是我的第一个非根标签)。

在我的XSD文件中,条目如下所示:

<xs:element name="cropdata">
<xs:complexType>
<xs:sequence>

然后一堆“<xs:element..../&gt;” 然后:

</xs:sequence>
</xs:complexType>
</xs:element>

进入perl调试器显示,在让行"my $doc = $parser->parse_string($file);"运行后,$ doc将打印为XML :: LibXML :: Document = SCALAR(0x6b99f0)。

任何人都可以帮助我阐明我做错了吗? (警告:这可能是一个愚蠢的错误,我不会把它放过自己)。

1 个答案:

答案 0 :(得分:0)

原来我提供的样本xml文件无效,并且看到,在xmllint中检查并纠正它时,一切正常。