作者liyih ()
看板Perl
标题Re: [问题] XML with Perl
时间Tue Jun 29 10:52:26 2010
可以参考一下 XML::LibXML::Dtd 与 XML::LibXML::Parser 的文件
1.
http://search.cpan.org/~pajas/XML-LibXML-1.70/lib/XML/LibXML/Dtd.pod
2.
http://search.cpan.org/~pajas/XML-LibXML-1.70/lib/XML/LibXML/Parser.pod
sub load_dtd_file {
my $result = '';
open(FH, "memo.dtd");
local $/;
$result = <FH>;
close(FH);
return $result;
}
my $dtd = XML::LibXML::Dtd->parse_string( load_dtd_file() );
my $doc = $parser->parse_file( $xmlfilename );
$doc->validate($dtd);
[ 输出结果 ]
Q2.xml:3: validity error : No declaration for element sto
※ 引述《projectcat (神手猫)》之铭言:
: 请教一下
: 如何使用perl来验证XML档是否符合DTD的格式??
: #====分隔线===
: 如何找出行数????
: ##===== V-parser.pl
: #!/usr/bin/perl
: use XML::LibXML;
: # initialize the parser
: my $parser = new XML::LibXML;
: my $xmlfilename = shift @ARGV;
: # open a file and parse
: my $doc = $parser->parse_file( $xmlfilename );
: if( $doc and $doc->is_valid ) {
: print "OK, it's valid.\n";
: } else {
: print "Not OK. Validity error.\n";
: }
: ##===== Q2.xml
: <!DOCTYPE memo SYSTEM "memo.dtd">
: <memo priority="info">
: <sto>Sara Bellum</sto> <================故意错的
: <from> &myname; </from>
: <message>Stop reading memos and get back to work!</message>
: </memo>
: ##===== memo.dtd
: <!ELEMENT memo (to, from, message)>
: <!ATTLIST memo priority (urgent|normal|info) 'normal'>
: <!ENTITY % text-only "(#PCDATA)*">
: <!ELEMENT to %text-only;>
: <!ELEMENT from %text-only;>
: <!ELEMENT message (#PCDATA | emphasis)*>
: <!ELEMENT emphasis %text-only;>
: <!ENTITY myname "Bartholomus Chiggin McNugget">
: ##=====shell
: $ V-parser.pl Q2.xml
: Not OK. Validity error.
: 如果想找出错误的行数怎麽改写??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.64.133
1F:推 projectcat:感恩~~ 07/09 12:00