2011-08-15 4 views
3

Perl 모듈 HTML::PullParser을 사용하고 있습니다. 나는 때때로 텍스트 요소를 (내가 말할 수있는 한) 무작위로 나눠 봤다. 내가HTML :: PullParser가 임의로 텍스트 요소를 나눕니다.

<html> 
... 
<FONT STYLE="font-family:Times New Roman" SIZE="2">THE QUICK BROWN FOX</FONT> 
... 
</html> 

의 내용과 함께 HTML 파일 test.html을 그리고 예를 들어

내 펄 코드는 다음

my $html = HTML::PullParser->new(file => 'test.html', text => '"T", text'); 
while (my $token = $html->get_token) { 
    print "$$token[1]\n"; 
} 

같이 보입니다 가끔 내가 다시

THE QUICK BROWN FOX # correctly parsed 
를 얻을 수

하지만 다른 시간은 내가받습니다

THE QUICK 
BROWN FOX 

여기서 텍스트 요소는 두 개의 분리 된 토큰으로 구문 분석됩니다. 그러나 다른 시간에 html 파일의 다른 내용에 따라 얻을 수 있습니다.

THE QUICK BROWN 
FOX 

중단 점이 다른 곳에서 발생합니다. 이 동작은 매우 성가신 일입니다. 그리고 문제를 격리하기 위해 최선을 다했습니다. 파일 전체에 종속 된 것처럼 보입니다 (즉, 파일의 나머지 부분 만 삭제하면 해당 요소 만 남았습니다). 그러나 파일의 나머지 부분에서이 부분이 원인인지 확인할 수 없습니다. 누구나 비슷한 경험을하고 문제를 해결하는 방법을 알고 있다면 궁금해하십니까? 고마워!!

업데이트 :이 잘못된 동작의 발생은 파일의 다른 부분에서 HTML 코드의 단일 섹션에 종속되지 않습니다. 해당 텍스트 요소보다 먼저 html 코드의 두 섹션을 분리 할 수있었습니다. 둘 다 존재하면이 오류가 발생합니다. 그러나 둘 중 하나가 다른 하나없이 존재할 때,이 문제는 사라집니다 ... 나는 절대적으로 혼란스럽고 화를냅니다.

답변

3

HTML :: PullParser는 HTML :: Parser의 하위 클래스입니다. HTML :: Parser에는 가능한 한 빨리 텍스트 이벤트를 출력하는지 여부 또는 파서가 텍스트가 더 이상 제공되지 않을 때까지 텍스트를 버퍼링할지 여부를 제어하는 ​​unbroken_text 특성이 있습니다. 기본값은 가능한 빨리 텍스트 노드를 생성하는 것입니다. $p->unbroken_text(1) 호출은 버퍼를 만들어야합니다 :)

+0

'HTML :: Parser'는'HTML :: Parser'의 하위 클래스입니다. –

+0

@evil otto right;) – hobbs

+0

마술처럼 작동합니다. 정말 고맙습니다! – Zhang18

관련 문제