什么是一个简单的 Perl 脚本来解析带有自定义标签的 HTML 文档(Perl 解释器)?

发布于 2024-10-08 07:12:39 字数 892 浏览 3 评论 0原文

好吧,这就是我正在做的。我正在为以我的自定义扩展名(.cpm) 结尾的文档制作一个perl 解释器。我环顾四周,发现

似乎 HTML::Parser 是要走的路。我要求的是一个简单的教程来解析带有特殊标签的文档。例如,我想要一些东西来告诉我如何解析 HTML 文档,但是每当遇到 时,它就会用 替换它。

我想要的示例

-
这是 HTML 语言
说“这是利亚姆斯语言”

Ok this is what I'm doing. I'm making a perl interpreter for documents that end in my custom extension(.cpm). I have looked around and found

It seems that HTML::Parser is the way to go. What I am asking for is a simple tutorial to parse a document with special tags. For example I would like something that shows me how to parse a HTML document but whenever the <putinbold> is ecountered it replaces it with <b>.

An example of what I want-

<html>
This is HTML talking
<liamslanguage>say "This is Liams language speaking"</liamslanguage>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天暗了我发光 2024-10-15 07:12:39

使用 HTML::Parser 进行解析的重要部分是用正确的argspec分配正确的处理程序。示例程序:

#!/usr/bin/env perl

use strict;
use warnings;

use HTML::Parser;

my $html;
sub replace_tagname {
    my ( $tagname, $event ) = @_;

    if ( $tagname eq 'liamslanguage' ) {
        $tagname = 'b';
    }

    if ( $event eq 'start' ) {
        $html .= "<$tagname>";
    }
    elsif ( $event eq 'end' ) {
        $html .= "</$tagname>";
    }
}

my $p = HTML::Parser->new(
    'api_version' => 3,
    'start_h'     => [ \&replace_tagname,      'tagname, event' ],
    'default_h'   => [ sub { $html .= shift }, 'text'           ],
    'end_h'       => [ \&replace_tagname,      'tagname, event' ],
);
$p->parse( do { local $/; <DATA> } );
$p->eof();

print $html;

__DATA__
<html>
This is HTML talking
<liamslanguage>say "This is Liams language speaking"</liamslanguage>
</html>

The important part of parsing with HTML::Parser is to assign the right handlers with the right argspec. A sample program:

#!/usr/bin/env perl

use strict;
use warnings;

use HTML::Parser;

my $html;
sub replace_tagname {
    my ( $tagname, $event ) = @_;

    if ( $tagname eq 'liamslanguage' ) {
        $tagname = 'b';
    }

    if ( $event eq 'start' ) {
        $html .= "<$tagname>";
    }
    elsif ( $event eq 'end' ) {
        $html .= "</$tagname>";
    }
}

my $p = HTML::Parser->new(
    'api_version' => 3,
    'start_h'     => [ \&replace_tagname,      'tagname, event' ],
    'default_h'   => [ sub { $html .= shift }, 'text'           ],
    'end_h'       => [ \&replace_tagname,      'tagname, event' ],
);
$p->parse( do { local $/; <DATA> } );
$p->eof();

print $html;

__DATA__
<html>
This is HTML talking
<liamslanguage>say "This is Liams language speaking"</liamslanguage>
</html>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文