Ich möchte XML-Dateien mit xPaths analysieren. Nach dem Abrufen eines Knotens muss ich möglicherweise xPath-Suchen an den übergeordneten Knoten durchführen. Meine aktuellen Code XML::XPath Verwendung ist:Wie verwende ich XML :: XPath, um einen Elternknoten zu erhalten?
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";
}
}
}
Mein Ziel ist es, einen Hash-Wert von foo Elemente Namen und ihre Bar untergeordneten Knoten Werte zu erhalten, wenn ein foo es keinen Strich Knoten haben sollte man von der übergeordneten foo erhalten oder foos Knoten.
Für diese XML:
<root>
<foos>
<bar>GlobalBar</bar>
<foo>
<name>number1</name>
<bar>bar1</bar>
</foo>
<foo>
<name>number2</name>
</foo>
</foos>
</root>
Ich würde erwarten:
number1->bar1
number2->GlobalBar
Wenn Sie den obigen Code verwenden ich eine Fehlermeldung erhalten, wenn sie versuchen übergeordneten Knoten zu erhalten:
Can‘ t Aufrufmethode "getNodeType" auf einem undefinierten Wert
Jede Hilfe wird sehr geschätzt!
Danke - es funktioniert jetzt gut. Ich werde in XML schauen: LibXML wie Sie es empfohlen haben. – Dror