如何使用 perl 将 xml 路径包含到哈希中

发布于 2024-12-21 03:33:29 字数 882 浏览 0 评论 0原文

我的目录中有一些 xml 文件,因此我在该目录中搜索所需的 xml 文件,并使用下面的脚本将 xml 数据存储在哈希数据结构中。但我的问题是我需要将每个 xml 文件的文件路径保存在哈希中但是任何人都可以帮助我如何在哈希数据中保存文件路径 我使用上面的脚本编写了这样的脚本

#!/usr/bin/perl
use warnings;
use strict;
use XML::Simple;
use Carp;
 use File::Find;
use File::Spec::Functions qw( canonpath );  
use Data::Dumper;

my @ARGV ="C:/Main/work"; die "Need directories\n" unless @ARGV;
 find(
 sub {
    return unless ( /(_service\.xml)$/ and -f );
    Hash_information();
    return;
},
@ARGV
);

sub Hash_information {
my $path= $_;

my $xml = new XML::Simple;
my $data = $xml->XMLin("$path", ForceArray => [  
'Service','SystemReaction','SW','HW','Component' , 'BM'],
                             KeyAttr=>{Service=>'Id'}  );
   print Dumper ($data);
 return;
  }

,我从文件夹中获取所有服务 xml 文件并使用 XML::Simple 存储在哈希数据结构中。现在我想将每个xml文件的文件路径保存在哈希数据结构中。任何人都可以帮助我吗?
提前致谢

I have some xml files in a directory , so I am searching required xml files in that directory and storing xml data in a hash data structure using below script. But my problem is I need to save the file path of each xml file in the hash But Can any one help me how to save file path in hash data
I written script like this

#!/usr/bin/perl
use warnings;
use strict;
use XML::Simple;
use Carp;
 use File::Find;
use File::Spec::Functions qw( canonpath );  
use Data::Dumper;

my @ARGV ="C:/Main/work"; die "Need directories\n" unless @ARGV;
 find(
 sub {
    return unless ( /(_service\.xml)$/ and -f );
    Hash_information();
    return;
},
@ARGV
);

sub Hash_information {
my $path= $_;

my $xml = new XML::Simple;
my $data = $xml->XMLin("$path", ForceArray => [  
'Service','SystemReaction','SW','HW','Component' , 'BM'],
                             KeyAttr=>{Service=>'Id'}  );
   print Dumper ($data);
 return;
  }

using above script I am getting all service xml files form folder and using XML::Simple storing in a hash data structure. Now I want to save file path of each xml file in the hash data structure. Can any one help me.
Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱花细雨 2024-12-28 03:33:29

在 File::Find 的子例程中,$File::Find::name 是完整路径名。将其传递给您的 Hash_information 子例程。

...
find(
    sub {
        return unless ( /(_service\.xml)$/ and -f );
        Hash_information($File::Find::name);
...
sub Hash_information {
my ($path) = @_;
...

In the subroutine for File::Find, $File::Find::name is the complete path name. Pass that to your Hash_information subroutine.

...
find(
    sub {
        return unless ( /(_service\.xml)$/ and -f );
        Hash_information($File::Find::name);
...
sub Hash_information {
my ($path) = @_;
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文