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から1を取得する必要があり、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