gpt4 book ai didi

xml - 无法运行 perl 脚本,找不到使用命令?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:42 26 4
gpt4 key购买 nike

我有一个 xml 文件 (client_23.xml)我需要根据其他 xml 文件中的内容在特定部分添加几行 (abc_lop.xml) .

这是我的 abc_lop.xml你看到我有很多ClientField的文件符合 name , pptypedataType

<Hello version="100">
<DataHolder numberOfFields="67">
<ClientField name="target" pptype="aligning" dataType="string">
<Value value="panel_3646"/>
<Value value="panel_3653"/>
</ClientField>
<ClientField name="category_3652_0_count" pptype="symetrical" dataType="double"/>
<ClientField name="pme.age" pptype="symetrical" dataType="double"/>
<ClientField name="pme.gender" pptype="aligning" dataType="string">
<Value value=""/>
<Value value="F "/>
<Value value="NA"/>
</ClientField>
</DataHolder>
</Hello>

我需要阅读这个文件并提取 name来自那些ClientField行,如果它是 pptype不是 aligning然后我需要为每个名称构造这一行:下面是两个名称的示例,只有第一个值不同,除此之外,其他两个始终相同。

<eval>upsert("category_3652_0_count", 0, $calty_doubles)</eval>
<eval>upsert("category_3652_2_count", 0, $calty_doubles)</eval>

现在如果它是 pptypealigning ,然后像这样构造线:

<eval>upsert("target", "NA", $calty_strings)</eval>
<eval>upsert("pme.gender", "NA", $calty_strings)</eval>

我必须在 client_23.xml 中进行所有这些更改文件,然后用它创建一个新文件,这样我的新文件看起来像这样作为一个例子:我将有一个名为 data_values 的函数我需要在 <block> 中添加以上内容标记如下所示。

    <function>
<name>data_values</name>
<variables>
<variable>
<name>temp</name>
<type>double</type>
</variable>
</variables>
<block>
<eval>temp = 1</eval>
<eval>upsert("category_3652_0_count", 0, $calty_doubles)</eval>
<eval>upsert("category_3652_2_count", 0, $calty_doubles)</eval>
<eval>upsert("target", "NA", $calty_strings)</eval>
<eval>upsert("pme.gender", "NA", $calty_strings)</eval>
</block>
</function>

这是我目前在 client_23.xml 中的内容文件,所以添加后,它将如下所示:

    <function>
<name>data_values</name>
<variables>
<variable>
<name>temp</name>
<type>double</type>
</variable>
</variables>
<block>
<eval>temp = 1</eval>
</block>
</function>

我想出了下面的 perl 脚本,但每当我尝试运行它时,它都没有运行,而且我看到了一些错误:

#!/usr/bin/perl
use strict;
use warnings;

use XML::LibXML;

# Open the main XML file and locate the
# <block> element that we need to insert into
#
my $doc = XML::LibXML->load_xml(
location => 'client_23.xml',
no_blanks => 1,
);
my $block = $doc->find('/function/block')->get_node(1);

# Open the secondary XML file and find all the <ClientField> elements
# that contain the data we need to insert
#
my $abc = XML::LibXML->load_xml(location => 'abc_lop.xml');

for my $field ( $abc->find('/Hello/DataHolder/ClientField')->get_nodelist ) {

my ($name, $pptype) = map $field->getAttribute($_), qw/ name pptype /;

my $text = $pptype eq 'aligning' ?
sprintf q{upsert("%s", "NA", $calty_strings)}, $name :
sprintf q{upsert("%s", 0, $calty_doubles)}, $name;

$block->appendTextChild('eval' , $text);
}

print $doc->toString(2);

我使 perl 脚本可执行并像这样运行它,但出现错误。怎么了?

./tester.perl: line 1: use: command not found
./tester.perl: line 2: use: command not found
./tester.perl: line 4: use: command not found
./tester.perl: line 9: syntax error near unexpected token `('
./tester.perl: line 9: `my $doc = XML::LibXML->load_xml('

更新:-

使用错误现已修复。我看到这个错误:

Can't locate XML/LibXML.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at ./tester.perl line 5.
BEGIN failed--compilation aborted at ./tester.perl line 5.

我需要安装什么吗?

最佳答案

Can't locate XML/LibXML.pm 

因此您需要安装 XML::LibXML 模块。尝试其中一个命令。

如果您有 sudo 访问权限,并且在 Debian Linux 或 Ubuntu 上,请运行此命令:

sudo apt-get install libxml-perl

如果您有 sudo 访问权限并且在 Red Hat、CentOS、Fedora 或 Amazon Linux 上:

sudo yum install perl-XML-LibXML

在其他带有 sudo 的平台上(例如 OS X),这应该可以工作,但是如果您还没有运行 cpan,您将不得不回答很多问题之前:

sudo cpan XML::LibXML

如果您没有 sudo 访问权限,请在没有 sudo 的情况下运行相同的命令,并在询问方法时选择 local::lib你想要:

cpan XML::LibXML

关于xml - 无法运行 perl 脚本,找不到使用命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com