documentation on CPAN 뭔가를 놓치지 않는 한이 동작을 실제로 설명하지 않습니다. 나는 내 문제를 설명하기 위해 함께 몇 가지 빠른 테스트 코드를 삽입했습니다 위의 스크립트를 실행 한 후HTML :: TreeBuilder의 "parent"함수는 정확히 어떻게 작동합니까?
#!/usr/bin/perl
use warnings;
use strict;
use HTML::TreeBuilder;
my $testHtml = "
<body>
<h1>
<p>
<p>HELLO!
</p>
</p>
</h1>
</body>";
my $parsedPage = HTML::TreeBuilder->new;
$parsedPage->parse($testHtml);
$parsedPage->eof();
my @p = $parsedPage->look_down('_tag' => 'p');
foreach (@p) {print $_->parent->tag, " : ", $_->tag, "\t", $_->as_text, "\n";}
을, 출력은 다음과 같습니다
body : p
body : p HELLO!
모든 태그가 차례로 중첩으로보고, 나는 첫 번째 p
태그의 부모는 h1
이고 두 번째 p
태그의 부모는 p
이라고 생각할 것입니다. 상위 기능이 두 가지 모두에 body
태그를 표시하는 이유는 무엇입니까?
흠, 샘플은 구문 분석해야하는 HTML의 일종의 레크리에이션 일뿐입니다. 유효하지 않은 HTML을 처리하는 최선의 방법이 무엇인지 확신 할 수 없습니다. – s2cuts
실제로 HTML :: Parser는 어떤 태그가 서로 내부에 중첩되도록 허용되는지 신경도 쓰지 않습니다. 시작 태그, 종료 태그, 텍스트 등을 인식하는 것은 HTML :: Parser에 의해 생성 된 이벤트를 취하고 유효하게 중첩 된 트리를 구성하는 HTML :: TreeBuilder입니다. 대부분의 브라우저와 같은 방식으로 잘못된 HTML을 처리합니다. – cjm