gpt4 book ai didi

xml - perl LibXML : validate doc against dtd, 返回 bool 值

转载 作者:数据小太阳 更新时间:2023-10-29 03:02:31 25 4
gpt4 key购买 nike

我正在尝试使用 LibXML 编写一个 perl 脚本,该脚本根据 dtd 验证文档并返回一个 bool 值来判断该文档是否有效。我希望能够在 xml 文件的文件夹上运行脚本,报告哪些有效,哪些无效,并记录那些无效的错误。

我的脚本确实验证了一个文档,但它在第一个无效文档处停止。

use strict;
use warnings;
no warnings 'uninitialized';
use XML::LibXML;
use IO::Handle;

# script to test dtd validity against test xml instance
my $instance = 'C:\jason\code\perl\dev\well-formed-test\family-instance1.xml';
$instance =~ s#\\#/#g;

print "about to test $instance \nagainst dtd\n\n";
my $parser = XML::LibXML->new();
$parser->validation(1);
print "here we go...\n";
print "test : ", &isValid( $instance );
print "after sub.\n";



sub isValid {
my $file = shift;
return $parser->parse_file($instance);
}

我在下面的脚本上尝试了很多变体,不使用那个 sub,将 parse 命令放在 eval block 中,等等。

根据 this tutorial.,我在使用 filehandle->fd_open 时遇到了问题.我也不清楚 parse_file 函数根据 cpan docs. 返回什么

返回关于文档是否有效的 bool 值的最佳方法是什么?

这是 xml 文档:

<?xml version="1.0"?>
<!DOCTYPE family SYSTEM "family.dtd">
<family>
<member gender="female">
<firstName>Sally</firstName>
<lastName>Smith</lastName>
</member>
<member gender="male">
<firstName>Bernie</firstName>
<lastName>Smith</lastName>
</member>
<member gender="female">
<firstName>Anna</firstName>
<lastName>Smith-Jones</lastName>

</member>
</family>

和 dtd:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT family (member+)>
<!ELEMENT member (firstName, lastName)>
<!ATTLIST member gender (male|female) 'male'>

<!ELEMENT firstName (#PCDATA)>
<!ELEMENT lastName (#PCDATA)>

如果文件有效,脚本将按预期运行(它到达“子之后”那一行),但是当我添加导致失败的标签时

<sometag/>

脚本打印出错误,但没有到达最后一行。谢谢!

最佳答案

The documentation说:

All of the functions listed below will throw an exception if the document is invalid.
To prevent this causing your program exiting, wrap the call in an eval{} block

parse_file是这些功能之一。

eval ,您可以通过期望 S@S! 来检查结果。

关于xml - perl LibXML : validate doc against dtd, 返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24248060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com