Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl LibXML:使用load_xml时。。。是否有等效的close_xml特性?_Perl_Libxml2 - Fatal编程技术网

Perl LibXML:使用load_xml时。。。是否有等效的close_xml特性?

Perl LibXML:使用load_xml时。。。是否有等效的close_xml特性?,perl,libxml2,Perl,Libxml2,当我在foreach循环中使用“load_xml”时,是否需要使用或等效的“close”cmd?我一直在谷歌上搜索,但还没有找到 与标记为“$dom”的行类似的问题是用my声明的。因此,一旦变量超出范围,对象就会被销毁(除非有对它的引用) 如果您想在作用域结束之前删除对象,您甚至可以尝试undef$dom。对不起:是的,我同意我原始问题的第一部分。所以您的意思是,既然$dom是用“我的,每个后续循环迭代实际上是重新定义上一个循环迭代。。。我可以买。但是关于“我的$schema”行呢?我想让我不感

当我在foreach循环中使用“load_xml”时,是否需要使用或等效的“close”cmd?我一直在谷歌上搜索,但还没有找到


与标记为“$dom”的行类似的问题是用
my
声明的。因此,一旦变量超出范围,对象就会被销毁(除非有对它的引用)


如果您想在作用域结束之前删除对象,您甚至可以尝试
undef$dom

对不起:是的,我同意我原始问题的第一部分。所以您的意思是,既然$dom是用“我的,每个后续循环迭代实际上是重新定义上一个循环迭代。。。我可以买。但是关于“我的$schema”行呢?我想让我不感兴趣的是方法“new”的用法/术语-我担心“new”的真正含义是它在引擎盖下创建了$schema的多个版本。。。这是真的还是不是问题?@CraigP:它的行为是一样的。它是为循环的每次迭代创建的,在循环结束时,它的作用域结束,对象被销毁。顺便说一句,我不想仅仅为了这个观察/问题而启动第二个线程:使用上面的验证代码,它不会打印出错误行号。有人知道如何解决这个问题吗?我可能不得不改用xmllint或xmlstarlet——我已经知道它们是有效的。
my $parser = XML::LibXML->new({keep_blanks=>(0)});    
foreach my $xml_file (@xml_file_list)
{
 my $dom = $parser->load_xml(location => $xml_file) or die;
 my $schema_file = $xsd_path."/".$xsd_file;
 my $schema = XML::LibXML::Schema->new(location => $schema_file); #<--HERE too

 eval { $schema->validate($dom)};
 if ($@)
 {
  print "File failed validation: $@\n";
 }
}