use XML::LibXML;
use Data::Dumper;
#parsing file
my $dom = XML::LibXML->new->parse_file('sample.xml');
my $context = XML::LibXML::XPathContext->new($dom->documentElement() );
$context->registerNs('u', 'http://uniprot.org/uniprot');
#print file to make sure it looks ok
print $dom, "\n";
#finds shortnames
my $sn = $context->findnodes('//u:shortName');
print 'ShortName: '.$sn, "\n";
#finds dbRefernce ids that are of type EC
my $ids = $context->findnodes('//u:dbReference[@type="EC"]/@id');
my $number =()= $ids =~ /\./gi;
print 'EC Values: '.$ids, "\n";
#finds sequences that have a length
my $seq = $context->findnodes('//u:sequence[@length>1]');
$seq =~ s/" "/"\n"/;
print 'Sequence: '.$seq, "\n";
J'ai actuellement ce code, qui fonctionne sur ce fichier xml qui a 10 balises (https://www.dropbox.com/s/dq8ir9f22cnfwrz/Sample.xml). Pour l'instant, il extrait le nom court, dbReference et la séquence des 10 entrées dans ce fichier xml et les ajoute ensemble pour imprimer. Ce que je voudrais faire, il a un nom court, dbReference, et une séquence pour chaque entrée dans le fichier xml. Est-il possible que le script recherche ces données une à la fois pour chaque entrée? Mon but final est de les formater d'une manière spécifique pour la sortie.extractibles et Stockage de données XML avec Libxml/XPath
Je pensais avoir du code qui s'exécute avant, qui n'extrait que les entrées, puis les envoie au reste du code pour l'extraction des données.
Merci
Impressionnant. Merci l'homme – bforcer
Juste une question rapide. Comment puis-je appeler la taille de la liste de nœuds. Il suffit de jouer avec le script – bforcer
Dans XPath, vous pouvez utiliser la fonction 'count()': 'count (// u: entry)' retournera le nombre d'entrées (il y a beaucoup d'autres fonctions: jetez un oeil aux exemples XPath @Miller posté dans sa réponse). En utilisant DOM, vous pouvez utiliser la propriété 'length' (vous pouvez également rechercher une référence DOM - elle est presque indépendante de la langue). – helderdarocha