2011-01-05 7 views
1

메신저 붙여 넣기 버그 일부 코드 : ERROR : 온 방법 "GetData의"를 호출 할 수 없습니다 여기정의되지 않은 값에 방법 "GetData의"를 호출 할 수 없습니다

eval 
{ 
    if (!($doc = $parser->parse_file($dir . $file))) 
    { 
     print "Parse ERROR: " . $! . "\n"; 
     move($dir . $file, $dirfailed . $file); 
     next; 
    }   
}; 

@nodes = $doc->findnodes("//story")or die "Can't find any '//story' nodes!"; 
foreach my $p_node (@nodes) 
{ 
    $titel = $p_node->getElementsByTagName("title")->item(0)->getFirstChild->getData; 
    print "TITEL:".$titel."\n" ; 
    ## Content/News text 
    $text =""; 
    eval 
    { 
    $text = &formatText($p_node->getElementsByTagName("body")->item(0)->getFirstChild->getData); 
    }; 
    print "\nE R R O R: "[email protected]"\n" if [email protected]; 

나는 다음과 같은 오류를 받고 있어요 /qflife/news/newsaktuell/news_aktuell_api.pl 에 정의되지 않은 값이 있습니다 (파일에 있음). 하지만 오류가 항상 나타나는 것은 아닙니다. 내 말은 때로는 스크립트를 본문을 찾을 수있는 동일한 파일로 실행하게 할 때를 의미합니다. 나는 내가 뭘 잘못하고 있는지 duno. 도움을 주시면 매우 감사하겠습니다!

감사 인사 마그 다의 muskala

답변

4

(는 "제목"또는 "몸"조회입니까? 예를 들어) 오류를 생성하는 예를 들어, XML, 및 오류를 생성하는 라인 번호를 게시하시기 바랍니다.

아마도 이것은 getFirstChild이 undef를 반환했음을 의미합니다. 즉, 목록의 첫 번째 노드에 자식 노드가 없습니다 (예 : 빈 "title"태그).

또한 파일 시스템에서 파일을 읽는 것과는 대조적으로 웹 연결에서 XML을 가져 오는 경우 네트워크 문제로 인해 XML이 손상되거나 비어있을 수 있습니다.

이 오류를 방지하려면처럼 뭔가 : 당신이 경로를 따라 각 노드의 존재를 확인해야합니다 아마

my $body = $p_node->getElementsByTagName("body")->item(0)->getFirstChild; 
if (ref $body) { # Make sure it's an object 
    $text = $body->getData; 
} else { 
    # Error handling 
} 
1

$p_node->getElementsByTagName("body")->item(0)->getFirstChild->getData

3

이있는 복잡한 표현이 실제로 지적 추적 아마 가치 실패. 그런 식으로 많은 메소드 호출을 연결하면, 그들이 모두 유용한 것을 반환 할 것임을 확신 할 수 있습니다.

my $body = $p_node->getElementsByTagName("body"); 

unless ($body) { 
    die "No body\n"; 
} 

my $item = $body->item(0); 

unless ($item) { 
    die "No item\n"; 
} 

my $first_child = $item->getFirstChild; 

unless ($first_child) { 
    die "No first child\n"; 
} 

my $text = $first_child->getData; 

unless ($text) { 
    die "No text\n"; 
} 
0

XPath를 사용하여 스토리를 가져 오는 중 탐색을 사용하는 대신 제목을 찾는 것이 어떨까요? 이 방법으로 결과를 얻거나 그렇지 않으면, 적어도 당신은 죽지 않습니다!

나는 간단한 표현도 작동 할 수 있습니다 의심하지만 $titel= $p_node->findvalue('//title[1]/*[1]')는, 당신이 쓴 것과 동일해야 (다른 언급으로, 그것은 당신이 처리하는 XML의 예를하지 않고 테스트하기 어렵다) 생각 .

여기에 XML :: LibXML을 사용한다고 가정합니다.

관련 문제