como obter os nós de elemento mais profundamente aninhados usando o xpath? (implementação com XMLTWIG)

Eu preciso extrair (XSLT, xpath, xquery ... De preferência xpath) oelemento mais profundamente aninhado nós commétodo (DEST id = "RUSSIA" method = "delete" />) e seu ancestral direto (SOURCE id = "AFRICA" method = "modify">).

Eu não quero obter os nós principais com métodos (main method = "modify"> ou main method = "modify">).

Os elementos aninhados mais profundos com o método correspondem a ações reais. Os principais elementos com método, na verdade, são ações falsas que não devem ser levadas em consideração.

Aqui está o meu arquivo de amostra 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>

Esta é a saída do Xpath que eu espero:

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

Meu comando xpath atual não fornece o resultado adequado.

Comando xpath ("// [@ method] / ancestor :: *") que está retornando:

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

Meu código xmltwig para informações adicionais (contexto):

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