Re: [問題] XML with Perl

看板Perl作者時間15年前 (2010/06/29 10:52), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
可以參考一下 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
文章代碼(AID): #1CAL_inu (Perl)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1CAL_inu (Perl)