как получить наиболее глубоко вложенные узлы элементов, используя xpath? (реализация с XMLTWIG)

Мне нужно извлечь (XSLT, xpath, xquery ... предпочтительно xpath)most deeply nested element узлы сmethod (DEST id = "РОССИЯ" method = "delete" / & gt;) и его прямой предок (SOURCE id = "AFRICA" method = "modify" & gt;).

Я не хочу получать верхние узлы с помощью методов (основной метод = & quot; изменить & gt; или основной метод = & quot; изменить & quot; & gt;).

Самые глубокие вложенные элементы метода соответствуют реальным действиям. Верхние элементы метода на самом деле являются фиктивными действиями, которые не должны приниматься во внимание.

Вот мой пример файла 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>

Это вывод Xpath, который я ожидаю:

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

Моя текущая команда xpath не дает адекватного результата.

Команда xpath (& quot; // [@ method] / ancestor :: * & quot;), которая возвращает:

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

Мой код xmltwig для дополнительной информации (контекст):

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

Ответы на вопрос(4)

Ваш ответ на вопрос