我使用CPAN安装了XML:LibXML
,但仍然收到以下错误:
Can't locate XML/LibXML/Element.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .)
以下是我的代码:
#!usr/bin/perl
use XML::LibXML::Element;
my $pxml = '/cctest/projects.xml';
my $twigp = XML::LibXML->new-> parse_file($pxml);
my $result = $twigp->getChildrenByTagName('branched_from_id');
print $result->to_literal,"\n";
projects.xml:
<projects>
<project>
<id>ID_2_19_16_12_15</id>
<name>RPSW </name>
<branch>fb16</branch>
<location>/draw/projects</location>
<author>Ras</author>
<branched_from_id>ID_10_8_13_12_35</branched_from_id>
<branched_from_version>175</branched_from_version>
</project>
<project>
<id>ID_1_21_14_1_13_24_PM</id>
<name>Platform</name>
<location>/draw/projects</location>
<author>lav</author>
<assigned_user>ka</assigned_user>
</project>
</projects>
请帮我确定一下我做错了什么?要求是仅获取具有元素branched_from_id
的节点。
答案 0 :(得分:4)
如果我使用您的代码,我会收到相同的Can't locate module
错误。但如果我使用
use XML::LibXML;
$node = XML::LibXML::Element->new( $name );
在模块的概要中提到了相同的内容。
您收到错误,因为没有Element.pm文件。 XML::LibXML::Element是LibXML.pm中的一个包。请参阅:https://metacpan.org/source/SHLOMIF/XML-LibXML-2.0128/LibXML.pm
例如,如果您有一个模块Mod::Test
为
package Mod::Test;
#do something
package Mod::Test::Another;
#do something
1;
并在脚本中将其用作
#!/usr/bin/perl
use strict;
use warnings;
use Mod::Test::Another;
然后你会收到错误,但是如果你use Mod::Test
那么你就不会收到错误。
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $filename = "projects.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($filename);
for my $node ($xmldoc->findnodes('/projects/project')) {
for my $property ($node->findnodes('./*')) {
if ($property->nodeName() eq 'branched_from_id'){
print "Found branched_from_id node, value is ".$property->textContent();
}
}
print "\n";
}
输出:
$ perl test.pl
Found branched_from_id node, value is ID_10_8_13_12_35