我有包含多个元素的 xml 文件<db>
,我需要从每个节点提取属性并对它们进行一些处理。
是否可以使用 ksh 和 xmllint 将它们加载到数组中?
这就是我所拥有的:
xml 文件:
<?xml version="1.0"?>
<main>
<resources>
<db>
<table_name tableid="001" user="mike">customer</table_name>
</db>
<db>
<table_name tableid="002" user="david">orders</table_name>
</db>
</resources>
</main>
脚本:
#!/usr/bin/ksh
tbid="$(echo "cat /main/resources/db/table_name/@tableid" | xmllint --shell data.xml )"
username="$(echo "cat /main/resources/db/table_name/@user" | xmllint --shell data.xml )"
echo $tbid
echo $username
输出:
/ > ------- tableid="001" ------- tableid="002" / >
/ > ------- user="mike" ------- user="david" / >
最终,我想得到一种二维数组:
arr[0],[0]=001
arr[0],[1]=mike
arr[1],[0]=002
arr[1],[1]=david
注意:
xmllint 不支持 xpath,因此无法安装。
数组可以用任何其他方式表示,我只需要能够提取并做一些工作。
答案1
我将提供如何解决这个问题,因为你还没有任何答案 - 我会使用优秀的模块XML::Twig
,并且perl
:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig -> new -> parsefile ( 'data.xml' );
foreach my $table ( $twig -> get_xpath('//table_name') ) {
print $table -> att('tableid'), " => ", $table -> att('user'), "\n";
}
这打印:
001 => mike
002 => david
Perl 有一个内置的数据结构,称为哈希,它也可能适合您的需求(取决于您想要什么):
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use XML::Twig;
my $twig = XML::Twig -> new -> parse ( \*DATA );
my %table_for;
foreach my $table ( $twig -> get_xpath('//table_name') ) {
my $tableid = $table -> att('tableid');
my $user = $table -> att('user');
$table_for{$user} = $tableid;
}
print Dumper \%table_for;
您可以迭代键%table_for
(有很多可能性,但我需要了解您想要扩展它们的内容)