好像我有點失落。Text ::平衡和多線xml
我需要解析一個大的(約100 MB)和相當醜陋的XML文件。如果我使用parsefile
,它會返回錯誤(文檔元素後的垃圾),但它會愉快地解析文件的較小元素。
所以我決定把文件分解成元素並解析它們。由於用正則表達式解析XML是不鼓勵的(嗯,無論如何我都試過了,但是我得到了重複的結果),我試過Text::Balanced
。
喜歡的東西
use Text::Balanced qw/extract_tagged/;
while (<FILE>) {
my $result = extract_tagged($_, "<tag>");
print $result if defined $result;
}
作品就好了,這樣我就可以提取其放入一個線標記的條目。隨着更大的東西,但是
use Text::Balanced qw/extract_tagged/;
use File::Slurp;
my $test = read_file("file");
my $result = extract_tagged($text, "<tag>");
print $result;
不起作用。它讀取文件,但無法在其中找到加標籤的項目。
所以問題是我如何提取給定標籤之間的任何東西沒有XML::Parser
?如果可能的話,我真的很需要避免咀嚼它。
P.S.搜索將返回正則表達式指南,heredoc howtos和任何東西,但我尋找
P.P.S.我是一個白癡,一直試圖解析一個無效的文件。如果分析器失敗,仍然很好奇如何切割文件。
bvr的答案很接近,它確實會檢索一些數據,但如果頂級標記丟失則不會。
非常Perl的方式回答:你明白你的意思。我將運行帶有恢復模式的解析器來對付損壞的文件,如果它設法提取信息,我將其標記爲答案。 –