2017-12-04 16 views
-2

HTMLページを受信し、ブロックを探し、自分の文字でテキストを囲む方法はありますか?悪い質問には申し訳ありませんPerlのHTMLブロック内に自分のタグを追加する

<html> 
<head> 
    <title>@Appleseed [email protected]</title> 
</html> 
<body> 
<table> 
    <tr> 
     <td>@[email protected]</td> 
     <td>@[email protected]</td> 
     <td><img src="blah/blah.jpg"></td> 
     <td></td> 
    </tr> 
</table> 
<div>@Some random [email protected]</div> 
<p>@Random image of the day:@ <img src="random.jpg"></p> 
</body> 
</html> 
+1

はい、方法があります。実際にはいくつかあります。しかし、ソフトウェア勧告を求めているのは残念ながら、スタックオーバーフローに関する話題です。あなた自身でこの作業を始める必要があります。問題が発生した場合は、喜んで支援を提供します。私の場合、HTMLのテキストノードを置き換える方法やXMLを解析する方法などの検索を開始します。 [CPAN](https://metacpan.org)でHTMLとXMLを探していると、すでに良い出発点があるはずです。 – simbabque

+1

@simbabqueは良いアドバイスだと言います。それをCPANと(多くの)既存のSOの投稿の両方で検索します。具体的なものを少なくとも提供するために、私は[HTML :: TreeBuilder](http://search.cpan.org/~kentnl/HTML-Tree-5.07/lib/HTML/TreeBuilder.pm)を使ってHTMLを解析して処理します。 - しかし、もっとたくさんあります。 – zdim

答えて

0

<html> 
<head> 
    <title>Appleseed Farm</title> 
</html> 
<body> 
<table> 
    <tr> 
     <td>Col1</td> 
     <td>Col2</td> 
     <td><img src="blah/blah.jpg"></td> 
     <td></td> 
    </tr> 
</table> 
<div>Some random text</div> 
<p>Random image of the day: <img src="random.jpg"></p> 
</body> 
</html> 

は、テキストの周りに私の '@' タグで、次のようになります。たとえば

は、次のHTMLを与えられました。私はHTML :: Elementページを調べた後、それを理解しました。

use strict; 
use warnings; 
use HTML::TreeBuilder; 
use feature ':5.10'; 

my $root = HTML::TreeBuilder->new_from_file(\*DATA); 
$root->elementify; 

for my $e ($root->look_down (
    sub { 
     my $tag = $_[0]->tag(); 
     grep(/^$tag$/, qw(td div p title span)) 
     } 
)) 
{ 
    #Do an in-place replacement 
    foreach my $item_r ($e->content_refs_list) { 
     next if ref $$item_r; 
     $$item_r =~ s/^(.+)$/\@$1\@/g; 
    } 
} 

say $root->as_HTML (undef, " ", {}); 

__DATA__ 
<html> 
<head> 
    <title>Appleseed Farm</title> 
</html> 
<body> 
<table> 
    <tr> 
     <td>Col1</td> 
     <td>Col2</td> 
     <td><img src="blah/blah.jpg">Col 3</td> 
     <td>cat</td> 
    </tr> 
</table> 
<div>Some random text</div> 
<p>Random image of the day: <img src="random.jpg"></p> 
</body> 
関連する問題