2017-12-04 2 views
-2

HTML 페이지를 받고, 블록을 찾고, 내 문자로 텍스트를 묶는 방법이 있습니까?Perl의 HTML 블록 안에 내 태그 추가하기

예를 들어 다음과 같은 HTML을 제공 :

<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> 
<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

@imbabque가 말하는 것은 좋은 조언입니다. CPAN과 (많은) 기존 SO 게시물에서 검색하십시오. 적어도 특정 것을 제공하기 위해 [HTML :: TreeBuilder] (http://search.cpan.org/~kentnl/HTML-Tree-5.07/lib/HTML/TreeBuilder.pm)를 사용하여 HTML을 구문 분석하고 처리합니다. -하지만 더 많은 것이 있습니다. – zdim

답변

0

죄송합니다. 나는 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> 
관련 문제