如果格式不正確,我有一個任務可以更正xml文件的語法。目前我正在手動執行此任務。有沒有什麼辦法來驗證XML
文件的語法,如果XML格式不正確,然後糾正格式不正確?在perl中檢查並更正xml語法
是否可以使用Perl
腳本進行驗證和糾正?
感謝,
如果格式不正確,我有一個任務可以更正xml文件的語法。目前我正在手動執行此任務。有沒有什麼辦法來驗證XML
文件的語法,如果XML格式不正確,然後糾正格式不正確?在perl中檢查並更正xml語法
是否可以使用Perl
腳本進行驗證和糾正?
感謝,
XML::LibXML是一個驗證解析器。您可以使用它來確定XML是否有效。
use XML::LibXML qw();
my $parser = XML::LibXML->new();
if (eval { $parser->parse_file($qfn) }) {
print "ok\n";
} else {
print "error:\[email protected]";
}
自動修正XML是另一回事。沒有做出巨大的假設就不能自動修復壞的XML。例如,有沒有辦法知道
<foo>/bar<baz/</foo>
是否意味着是
<foo>/bar<baz/</foo>
或
<foo>/bar<baz/></foo>
甚至別的東西。
XML :: LibXML的確可以自動修復/忽略一些錯誤。誰知道它是否做出了同樣的假設。如果你想解析器是當它修復問題警告使用
use XML::LibXML qw();
my $parser = XML::LibXML->new(recover => $recover);
my $doc = $parser->parse_file($in_qfn);
$doc->toFile($out_qfn);
使用1
爲$recover
。
如果您想讓解析器靜默地修復問題,請使用2
替代$recover
。
不管你用於$recover
的是什麼,如果遇到不可恢復的錯誤,仍然會拋出異常。
您可以嘗試XML::Liberal:「解析破損的XML的超級自由XML解析器」,並查看它是否適用於您。
沒有一種算法可以可靠地取出任意非格式良好的XML並生成反映原始意圖的格式良好的XML。構造可能有許多不同解釋的非格式良好的XML很容易......修正碼如何決定哪一個是正確的?你所要求的等同於編寫一個接受無效代碼並「糾正」它的Java(或Perl)編譯器。如果我們有這些,語法錯誤將成爲過去。 – 2013-02-12 06:32:29
謝謝吉姆。有道理。 我們不能檢查打開和關閉標籤是否正確,如果不正確則更正它們? – MangeshBiradar 2013-02-12 06:36:15
檢查是否...? – 2013-02-12 06:38:28