jak uzyskać najgłębiej zagnieżdżone węzły elementów przy użyciu xpath? (implementacja z XMLTWIG)

Muszę wyodrębnić (XSLT, xpath, xquery ... Najlepiej xpath)najgłębiej zagnieżdżony element węzły zmetoda (DEST id = "ROSJA" method = "delete" />) i jego bezpośredni przodek (SOURCE id = "AFRICA" method = "modify">).

Nie chcę otrzymywać najlepszych węzłów metodami (main method = "modify"> lub main method = "modify">).

Najgłębsze zagnieżdżone elementy z metodą odpowiadają rzeczywistym działaniom. Pierwszymi elementami z metodą są w rzeczywistości atrapy akcji, które nie mogą być brane pod uwagę.

Oto mój przykładowy plik XML:

<?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>

To jest wyjście Xpath, którego oczekuję:

<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"/>

Moje aktualne polecenie xpath nie zapewnia odpowiedniego wyniku.

Polecenie xpath ("// [@ method] / ancestor :: *"), które powraca:

<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"/>

Mój kod xmltwig dla dodatkowych informacji (kontekst):

#!/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;
    }
  }

questionAnswers(4)

yourAnswerToTheQuestion