Wie erhält man die am tiefsten verschachtelten Elementknoten mit xpath? (Implementierung mit XMLTWIG)
Ich muss das extrahieren (XSLT, xpath, xquery ... Vorzugsweise xpath)am tiefsten verschachteltes Element Knoten mitMethode (DEST id = "RUSSIA" method = "delete" />) und sein direkter Vorfahr (SOURCE id = "AFRICA" method = "modify">).
Ich möchte die Top-Knoten nicht mit Methoden erhalten (main method = "modify"> oder main method = "modify">).
Die tiefsten verschachtelten Elemente mit Methode entsprechen realen Aktionen. Die Top-Elemente mit method sind eigentlich Dummy-Aktionen, die nicht berücksichtigt werden dürfen.
Hier ist meine XML-Beispieldatei:
<?xml version="1.0" encoding="UTF-8"?>
<main method="modify">
<MACHINE method="modify">
<SOURCE id="AFRICA" method="modify">
<DEST id="RUSSIA" method="delete"/>
<DEST id="USA" method="modify"/>
</SOURCE>
<SOURCE id="USA" method="modify">
<DEST id="AUSTRALIA" method="modify"/>
<DEST id="CANADA" method="create"/>
</SOURCE>
</MACHINE>
</main>
Dies ist die erwartete Xpath-Ausgabe:
<SOURCE id="AFRICA" method="modify"><DEST id="RUSSIA" method="delete"/>
<SOURCE id="AFRICA" method="modify"><DEST id="USA" method="modify"/>
<SOURCE id="USA" method="modify"><DEST id="AUSTRALIA" method="modify"/>
<SOURCE id="USA" method="modify"><DEST id="CANADA" method="create"/>
Mein aktueller xpath-Befehl liefert kein angemessenes Ergebnis.
Befehl xpath ("// [@ method] / ancestor :: *"), der zurückgibt:
<main><MACHINE method="modify"> # NOT WANTED
<MACHINE method="modify"><SOURCE id="AFRICA" method="modify"> # NOT WANTED
<MACHINE method="modify"><SOURCE id="USA" method="modify"> # NOT WANTED
<SOURCE id="AFRICA" method="modify"><DEST id="RUSSIA" method="delete"/>
<SOURCE id="AFRICA" method="modify"><DEST id="USA" method="modify"/>
<SOURCE id="USA" method="modify"><DEST id="AUSTRALIA" method="modify"/>
<SOURCE id="USA" method="modify"><DEST id="CANADA" method="create"/>
Mein xmltwig Code für zusätzliche Informationen (Kontext):
#!/usr/bin/perl -w
use warnings;
use XML::Twig;
use XML::XPath;
@my $t= XML::Twig->new;
my $v= XML::Twig::Elt->new;
$t-> parsefile ('input.xml');
@abc=$t->get_xpath("\/\/[\@method]\/ancestor\:\:\*") ;
foreach $v (@abc) # outer 1
{
foreach $v ($v ->children) # internal 1
{
$w=$v->parent;
print $w->start_tag;
print $v->start_tag;
}
}