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