好像我有点失落。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的方式回答:你明白你的意思。我将运行带有恢复模式的解析器来对付损坏的文件,如果它设法提取信息,我将其标记为答案。 –