小编Rom*_*dan的帖子

Text :: Balanced和multiline 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;
}
Run Code Online (Sandbox Code Playgroud)

工作得很好,所以我可以提取符合一行的标记条目.然而,有更大的东西

use Text::Balanced qw/extract_tagged/;
use File::Slurp;

my $test = read_file("file");
my $result = extract_tagged($text, "<tag>");
print $result;
Run Code Online (Sandbox Code Playgroud)

不起作用.它读取文件,但在那里找不到标记的项目.

所以问题是我如何在没有给定标签之间提取任何东西XML::Parser?如果可能的话,我真的需要避免咀嚼它.

PS搜索将返回正则表达式指南,heredoc howtos以及除了我寻找的任何内容

PPS我是个白痴,一直试图解析一个无效的文件.如果解析器失败,仍然很好奇如何切碎文件.


bvr的答案很接近,它确实会检索一些数据,但如果顶级标签丢失则不会.

xml perl

3
推荐指数
1
解决办法
446
查看次数

有一个SQL SELECT查询,我如何获得项目数?

我正在使用Dancer框架在Perl中编写一个Web应用程序.数据库是sqlite,我使用DBI进行数据库交互.

我对select语句很好,但我想知道有没有办法计算选定的行.

我有

get '/' => sub {
    my $content = database->prepare(sprintf("SELECT * FROM content LIMIT %d",
            $CONTNUM));
    $content->execute;
    print(Dumper($content->fetchall_arrayref));
};
Run Code Online (Sandbox Code Playgroud)

如何在不发出其他查询的情况下计算结果中的所有项目?

我想以这种方式实现的是每页显示30个项目并知道将有多少页面.当然我可以运行SELECT COUNT(*)foo bar,但它看起来不对,对我来说是多余的.我正在寻找或多或少的一般,干,而不是太沉重的数据库方式这样做.

任何SQL或Perl hack或暗示我应该阅读的内容将不胜感激.

//我知道使用字符串连接查询是不好的

sqlite perl dbi

1
推荐指数
1
解决办法
3286
查看次数

标签 统计

perl ×2

dbi ×1

sqlite ×1

xml ×1