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;
    }
  }

Antworten auf die Frage(4)

Ihre Antwort auf die Frage