2014-02-22 2 views
0

XML을 파싱하고 마지막 자식까지 트래버스해야하는 XML이 있으므로 XML의 깊이를 알 수 없으므로 XML이 동적으로 생성되므로 Can 마지막 xml과 형제가있을 때까지 xml을 반복합니다. 이 문제를 해결 도와주세요 :perl에서 XML 노드를 반복적으로 통과 XML :: LibXML

내 코드는 다음과 같습니다

  foreach my $childNodes ($root->findnodes('/')) 
      { 
       print $childNodes->nodePath; 
       print "\n"; 
       if($childNodes->hasChildNodes) 
       { 
        foreach my $gChildNode ($camelid->childNodes) 
        { 
         print $gChildNode->nodePath; 
         print "\n"; 
        } 
      } 

이 깊이 2까지 노드를 인쇄하지만 깊이가 3 인 경우 내가 루트가 한 아이가 평균과 아이는 내 코드 인쇄를 하지만 여기에 다른 아이가 있다면 코드는 인쇄되지 않으며 추측 할 수 없습니다. 어떻게 찾을 수 있습니까?

미리 감사드립니다.

+0

답변은 귀하의 제목에 있습니다 : 재귀가 필요합니다. – ikegami

답변

4

코드를 랩핑하여 함수에서 노드를 처리하고 재귀 적으로 호출하십시오. 몇 가지 추가 의견이있는 예 :

sub process_node { 
    my $node = shift; 

    print $node->nodePath, "\n"; 

    # No need to check hasChildNodes. If there aren't any 
    # children, childNodes will return an empty array. 
    for my $child ($node->childNodes) { 
     # Call process_node recursively. 
     process_node($child); 
    } 
} 

# documentElement is more straight-forward than findnodes('/'). 
process_node($root->documentElement); 
+0

제 질문에 대한 답변으로 제 코드를 찾으십시오. 답장을 보내 주시겠습니까? – SriSri

+0

이 프로세스에서 특정 노드가 있는지 확인할 수있는 방법은 무엇입니까? – SriSri

+0

@SriSri StackOverflow는 스레드가있는 토론 포럼처럼 작동하지 않습니다. 도움이 더 필요하면 새로운 질문을 열어야합니다. – nwellnhof