【问题标题】:validating xml with XML::LibXML使用 XML::LibXML 验证 xml
【发布时间】:2013-12-13 19:13:46
【问题描述】:

我正在使用以下代码针对 xsd 尝试以下 xml

my $schema = XML::LibXML::Schema->new(location => $xsd); 
my $parser = XML::LibXML->new;  
my $doc = $parser->parse_file($xml); 
eval { $schema->validate( $doc ) };  
if ( my $ex = $@ ) {
 print "error"
}     
else {
    print "Schema validated ok";
}

即使我的架构通过 ok 验证, 我在这条线上得到这个警告/错误

http 错误:没有这样的文件或目录

值得一提的是 xsd 在我当地的办公桌上 并在这一行发出错误

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

并且 $xsd 具有我的 xml 文件 c:\users\vivo\validate\xml.xsd 的位置

以下是我的架构的第一个概要

?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://ce.omb.edu/schema/34"
    xmlns:vivo="http://ce.omb.edu/schema/vivo/0.4"
    targetNamespace="http://ce.omb.edu/schema/subversion/vivi/2.0"
    elementFormDefault="qualified" attributeFormDefault="unqualified"
    version="2.0">
    <xsd:import namespace="http://ce.omb.edu/schema/vivo/0.4" schemaLocation="c:/users/vivo/desktop/validate/vivo.xsd"/>

有人可以帮助我为什么收到此警告/错误消息吗?

【问题讨论】:

  • 代码的哪一行发出了错误?
  • 这一行:我的 $schema = XML::LibXML::Schema->new(location => $xsd);
  • $xsd 的值是多少? (请将这些信息编辑到问题中,而不是在 cmets 中发布)

标签: xml perl xsd xsd-validation


【解决方案1】:

试试看:

die "$xsd is not a file" unless -f $xsd;

在您的my $schema 行之前,再次运行它并查看它的内容。根据上面的 cmets,它会告诉你它在哪里寻找。看起来文件名完全错误,或者 $xsd 不是绝对路径,并且从脚本的角度来看,当前工作目录不是您认为的那样。

如果是这种情况,请先查看http://perldoc.perl.org/Cwd.html,看看您能做些什么来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多