2012-06-25 4 views
3

J'essaie de répliquer ce que mon code C#/XPath fait sur Linux en utilisant Perl. J'ai copié et collé le code dans l'exemple 8-6 dans Perl & XML. Si je comprends bien, je devrais être en mesure d'exécuter ce code Perl, mettre ce code dans le terminalUtiliser XPath avec Perl

xmlPerl.pl mydatafile.xml "/inventory/category/item/name" 

Mais quand je tente d'exécuter le fichier Perl, il ne fonctionne pas. Voici l'erreur:

[[email protected] ~]# perl xmlPerl.pl 
Can't locate XML/XPath.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at xmlPerl.pl line 3. 
BEGIN failed--compilation aborted at xmlPerl.pl line 3. 

Qu'est-ce que je fais mal? Je pense que cela a quelque chose à voir avec les noms XML et XPath au début de mon code. Dois-je installer quelque chose pour utiliser le framework XPath? Je cours sur RedHat 5.5.

+0

De la ([FAQ Stack Overflow Perl] http://stackoverflow.com/questions/tagged/perl?sort = faq): [Quel est le moyen le plus simple d'installer un module Perl manquant?] (http://stackoverflow.com/questions/65865/whats-the-easiest-way-to-install-a-missing-perl-module – daxim

+0

Essayez d'obtenir un livre moderne qui enseigne [LibXML] (http://www.xmlsoft.org/) à la place, voir [Quelle est la manière la plus simple de faire une requête XPath de données XML en Perl?] (Http: // stackoverflow.com/questions/5275610/what-is-the-easiest-way-to-do-xpath-querying-of-xml-data-in-perl) – daxim

Répondre

9

De perldiag:

Can't locate %s

You said to do (or require, or use) a file that couldn't be found. Perl looks for the file in all the locations mentioned in @INC , unless the file name included the full path to the file. Perhaps you need to set the PERL5LIB or PERL5OPT environment variable to say where the extra library is, or maybe the script needs to add the library name to @INC . Or maybe you just misspelled the name of the file. See require in perlfunc and lib .

Vous n'avez pas installé le module XML::XPath, ou Perl ne l'a pas trouvé. Installez le module avec CPAN:

> cpan XML::XPath 

ou gestionnaire de paquets:

> apt-get install libxml-xpath-perl 

Ou si déjà installé dire où il est avec PERL5LIB variable d'environnement:

> PERL5LIB=/path/to/lib perl ... 

@INC variable:

BEGIN { 
    unshift(@INC, '/path/to/lib'); 
} 

ou lib pragma:

use lib '/path/to/lib'; 
+0

Cela a fonctionné, il a installé et tout, mais maintenant je reçois cette erreur - "Aucun chemin à trouver à /usr/lib/per5/site_perl/5.8.8/XML/XPath.pm ligne 65" Je l'ai également installé en utilisant cpan . – PolarisUser

0

La réponse est dans la première partie de votre erreur:

Can't locate XML/XPath.pm 

En Perl, l'énorme avantage est d'utiliser des modules ou des bibliothèques, que d'autres ont écrit pour vous et vous pouvez réutiliser. Dans ce cas, quelqu'un a écrit un module appelé XML :: XPath (en Perl, le chemin est délimité par '::') et vous avez juste besoin de l'installer. Le moyen le plus simple de l'installer est d'utiliser le cpan, un outil installé avec la plupart des installations Perl. Il suffit de lancer:

cpan 
(you'll be dropped into a different command prompt) 
install XML::XPath 

Cela aller chercher XML :: XPath, décompresser, générer le Makefile, vérifiez les dépendances (et installer qui manquent), le faire, le tester, et l'installer toi. Regardez here pour plus d'informations sur l'utilisation du CPAN.

+0

Cela a fonctionné, installé et tout, mais maintenant je reçois cette erreur - "Aucun chemin à trouver à /usr/lib/per5/site_perl/5.8.8/XML/XPath.pm ligne 65" Je l'ai également installé en utilisant cpan. – PolarisUser

3

C'est l'erreur standard qui vient d'essayer de use un module qui n'est pas installé. Vous devriez l'installer.

Idéalement, utilisez le package du système d'exploitation pour cela; par exemple sur un système d'exploitation dérivé debian-(comme Debian ou Ubuntu)

$ apt-get install libxml-xpath-perl 

A défaut, vous pouvez l'installer comme d'habitude en utilisant CPAN

$ cpan XML::XPath 
+0

Ah je vois. Je l'exécute sur RedHat 5.5 Je vais essayer de voir si je peux trouver une installation pour cela. Je posterai dessus cette solution a fonctionné! Je vous remercie! – PolarisUser

+0

Cela a fonctionné, il a installé et tout, mais maintenant je reçois cette erreur - "Aucun chemin à trouver à /usr/lib/per5/site_perl/5.8.8/XML/XPath.pm ligne 65" Je l'ai également installé en utilisant cpan . – PolarisUser

+0

Eh bien, l'erreur 'No path to find' est probablement une erreur XPath, se plaignant de ne pas trouver le nœud demandé dans votre structure de données. Cela ne ressemble pas à une erreur Perl. – LeoNerd