xPaths를 사용하여 XML 파일을 구문 분석하려고합니다. 노드를 얻은 후에는 부모 노드에서 xPath 검색을 수행해야 할 수도 있습니다. XML::XPath를 사용하여 내 현재 코드는 다음과 같습니다XML :: XPath를 사용하여 부모 노드를 얻는 방법?
my $xp = XML::XPath->new(filename => $XMLPath);
# get all foo or foos node with a name
my $Foo = $xp->find('//foo[name] | //foos[name]');
if (!$Foo->isa('XML::XPath::NodeSet') || $Foo->size() == 0) {
# no foo found
return undef;
} else {
# go over each and get its bar node
foreach my $context ($Foo->get_nodelist) {
my $FooName = $context->find('name')->string_value;
$xp = XML::XPath->new(context => $context);
my $Bar = $xp->getNodeText('bar');
if ($Bar) {
print "Got $FooName with $Bar\n";
} else {
# move up the tree to get data from parent
my $parent = $context->getParentNode;
print $parent->getNodeType,"\n\n";
}
}
}
내 목표는 foo는이 바 노드가없는 경우는 부모 foo는에서 하나를 얻을해야하는 foo는 요소 이름의 해시과 바 자식 노드의 값을 얻을 수 있습니다 또는 foos 노드. 이 XML에 대한
:
<root>
<foos>
<bar>GlobalBar</bar>
<foo>
<name>number1</name>
<bar>bar1</bar>
</foo>
<foo>
<name>number2</name>
</foo>
</foos>
</root>
내가 기대 :
number1->bar1
number2->GlobalBar
부모 노드를 얻으려고 때 오류가 발생하는 위의 코드를 사용하는 경우 :
수 ' t 정의되지 않은 값의 메소드 "getNodeType"을 호출
도움이 될 것입니다.
감사합니다. - 이제는 잘 작동합니다. 필자가 권고 한대로 XML : LibXML을 살펴 보겠습니다. – Dror