【问题标题】:Can't locate XML/LibXML/Element.pm in @INC在@INC 中找不到 XML/LibXML/Element.pm
【发布时间】:2016-10-14 07:23:59
【问题描述】:

我已经使用 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 的节点。

【问题讨论】:

  • 你安装XML::LibXML了吗?你可以通过cpan install XML::LibXML
  • 另外:打开use strict;use warnings;。另外:修复你的shebang路径。你可能需要#!/usr/bin/perl
  • 您是否使用sudo 安装了LibXML?否则,您的包含路径也应该包含您的用户的 perl 包含路径。
  • 您可能会从我的教程中受益:Perl XML::LibXML by Example。在这种情况下,主要问题似乎是您拥有use XML::LibXML::Element; 而不是use XML::LibXML;

标签: xml perl xml-parsing perl-module xml-libxml


【解决方案1】:

如果我使用您的代码,我会得到相同的 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那么你就不会得到错误。


BTW 下面是一种不使用 XML::LibXML::Element 来查找标签的方法。

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

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2013-10-24
    • 2018-01-11
    相关资源
    最近更新 更多