Re: [問題] XML with Perl
可以參考一下 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
推
07/09 12:00, , 1F
07/09 12:00, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章