在 Perl HTML::TreeBuilder 中获取/设置 innerHTML?

Posted

技术标签:

【中文标题】在 Perl HTML::TreeBuilder 中获取/设置 innerHTML?【英文标题】:Get/Set innerHTML in Perl HTML::TreeBuilder? 【发布时间】:2011-02-26 14:52:40 【问题描述】:

我可以得到 innerhtml 但不知道如何设置。

提前致谢。

【问题讨论】:

【参考方案1】:

我不确定这种方法是否会让你满意,但你可以使用pQuery 中的html($html) 方法:

这种方法类似于著名的 javascript/DOM 函数 innerHTML。

如果不带参数调用,这将 返回的内部 HTML 字符串 pQuery 中的第一个 DOM 元素 对象。

如果使用 HTML 字符串调用 参数,这将设置内部 HTML pQuery 中的所有 DOM 元素 对象。

至于为什么 pQuery 可以满足你,引用 POD:

pQuery::DOM 大致是一种尝试 在 Perl 中复制 JavaScript 的 DOM。它 子类 HTML::TreeBuilder/HTML::Element 所以 有一些不同之处 意识到。查看 pQuery::DOM 有关详细信息的文档。

【讨论】:

【参考方案2】:

我会使用 pQuery,但这会起作用

#!/usr/bin/perl --
use strict;
use warnings;
use HTML::TreeBuilder;

my $html = <<'__HTML__';
<div id="target">old <B>i</B><I>n</I>ner</div>
__HTML__


    my $t = HTML::TreeBuilder->new_from_content($html);

    print $t->as_HTML('<>&',' ',), "\n";

    my $target = $t->look_down( id => 'target' );
    $target->delete_content;
    $target->push_content(
        HTML::TreeBuilder->new_from_content(
            "<B>NEW</B>"
        )->look_down(qw!_tag body!)->detach_content
    );

    print $t->as_HTML('<>&',' ',), "\n";


__END__
<html>
 <head>
 </head>
 <body>
  <div id="target">old <b>i</b><i>n</i>ner</div>
 </body>
</html>

<html>
 <head>
 </head>
 <body>
  <div id="target"><b>NEW</b></div>
 </body>
</html>

是的,我是 RTFM

【讨论】:

完美运行,它甚至可以链接回 _parent。谢谢

以上是关于在 Perl HTML::TreeBuilder 中获取/设置 innerHTML?的主要内容,如果未能解决你的问题,请参考以下文章

perl 提取 </SPAN> 和 <br> 之间的句子

如何根据其类提取 HTML 元素?

如何在 html 树中向上移动一个节点并提取链接?

如何使用多个版本的 Perl 在 Perl 模块中安装脚本?

Perl 和 .NET RSA 一起工作?从 Perl 公钥在 .NET 中加密?从 Perl 加载私钥?

Perl 之父同意 Perl 6 改名为 Raku