【发布时间】:2023-03-15 08:28:01
【问题描述】:
我好像有点迷路了。
我需要解析一个大(大约 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 的情况下提取给定标签之间的任何内容?如果可能的话,我真的真的需要避免咀嚼它。
附:搜索将返回正则表达式指南、heredoc howtos 以及除我查找的内容之外的任何内容
P.P.S.我是个白痴,一直在尝试解析无效文件。如果解析器失败,仍然很好奇如何截取文件。
bvr 的回答很接近,它确实会检索一些数据,但如果缺少顶级标签则不会。
【问题讨论】: