저는 XML::Twig
을 사용하여 새롭습니다. 나는 서브 루틴 player
에서 속성 @method="create"
XML :: Twig를 사용하여 twig_handlers 메소드 next_sibling 또는 next_elt를 사용할 수 없습니다.
와 요소를 찾아 주 프로그램에서
, 나는 속성@method="modify"
와
다음 요소/형제를 찾고 싶어요. 이러한 방법의
두
오류 input.xwo의Can't call method "gi" on an undefined value
my $modif1=$valeur->next_sibling('[@method="modify"]')
my $modif2=$valeur->next_elt('[@method="modify"]')->parent
예와 서브 루틴 player
실패 :
<top id="World">
<middle id="France" method="create">
</middle>
<middle id="Germany" method="modify">
</middle>
</top>
내 간단한 코드 : 항상
#!/bin/perl -w
use warnings;
use XML::Twig;
my $twig= new XML::Twig(
twig_handlers => {
'[@method="create"]' => \&player
}
);
$twig->parsefile("input.xwo");
$twig->purge;
sub player {
my ($twig, $valeur) = @_;
my $modif1 = $valeur->next_sibling('[@method="modify"]');
my $modif2 = $valeur->next_elt('[@method="modify"]')->parent;
print "\nnextELT=" . $modif->gi . "\n";
}
그 해결책에 대해 @Borodin에게 감사드립니다. 그러나'twig_handlers'를 이용한 해결책을 위해서 나무의 모든 요소를 어떻게 찾을 수 있습니까? 작성한 코드에서 검색 할 첫 번째 분기로 'top'을 넣습니다. Twig_handler를 사용하여 모든 요소를 찾아야합니다. – laurentngu
'XML :: Twig'가 작동하도록 오해하고 있다고 생각합니다. 모든 * 요소에 핸들을 설정하면 거의 불필요한 많은 양의 코딩이 수반됩니다. XML 파일의 크기는 얼마입니까? 몇 KB에 이르면 전체 구조를 메모리로 읽어서 거기에서 처리하는 것이 가장 좋습니다. 해결해야 할 문제를 설명하면 – Borodin
을 더 도울 수 있으므로 twig_handlers (비동기 대기열)에서 "각 검색 요소 쿼리"를 사용하면 "전체 파일 + get_xpath"(두 번째 솔루션)보다 CPU/메모리가 많이 소모됩니다. ? 그렇다면 두 번째 해결책을 고수하고 twig_handlers를 기반으로 이전 코드를 수정합니다. – laurentngu