perl使用xml::simple来读写xml
一 读xml
1)xml实例
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee age = "30">
<name>linux</name>
<country>US</country>
</employee>
<employee age = "10">
<name>mac</name>
<country>US</country>
</employee>
<employee age = "20">
<name>windows</name>
<country>US</country>
</employee>
</employees>
<employees>
<employee age = "30">
<name>linux</name>
<country>US</country>
</employee>
<employee age = "10">
<name>mac</name>
<country>US</country>
</employee>
<employee age = "20">
<name>windows</name>
<country>US</country>
</employee>
</employees>
2)代码
use File::Basename;
use XML::Simple;
use Data::Dumper;
my $xmlfile = dirname($0) . "\\employees.xml";
if (-e $xmlfile)
{
print "-----------------------------------------\n";
my $userxs = XML::Simple->new(KeyAttr => "name");
my $userxml = $userxs->XMLin($xmlfile);
# print output
print Dumper($userxml);
my %allemployees = %{$userxml->{employee}};
foreach my $key (keys(%allemployees))
{
print $key . " ";
print $allemployees{$key}{"age"} . "\n";
}
print "-----------------------------------------\n";
my $userxsT = XML::Simple->new(ForceArray => 1);
my $userxmlT = $userxsT->XMLin($xmlfile);
# print output
print Dumper($userxmlT);
my @allemployeeT = @{$userxmlT->{"employee"}};
foreach my $employee (@allemployeeT)
{
print $employee->{"name"}[0] . " ";
print $employee->{"age"} . "\n";
}
}
use XML::Simple;
use Data::Dumper;
my $xmlfile = dirname($0) . "\\employees.xml";
if (-e $xmlfile)
{
print "-----------------------------------------\n";
my $userxs = XML::Simple->new(KeyAttr => "name");
my $userxml = $userxs->XMLin($xmlfile);
# print output
print Dumper($userxml);
my %allemployees = %{$userxml->{employee}};
foreach my $key (keys(%allemployees))
{
print $key . " ";
print $allemployees{$key}{"age"} . "\n";
}
print "-----------------------------------------\n";
my $userxsT = XML::Simple->new(ForceArray => 1);
my $userxmlT = $userxsT->XMLin($xmlfile);
# print output
print Dumper($userxmlT);
my @allemployeeT = @{$userxmlT->{"employee"}};
foreach my $employee (@allemployeeT)
{
print $employee->{"name"}[0] . " ";
print $employee->{"age"} . "\n";
}
}
3)结果
二 写xml
代码:
use File::Basename;
use XML::Simple;
use Data::Dumper;
print "-----------------------------------------\n";
# create array
my @arr = [
{'country'=>'england', 'capital'=>'london'},
{'country'=>'norway', 'capital'=>'oslo'},
{'country'=>'india', 'capital'=>'new delhi'} ];
# create object
my $xml = new XML::Simple(NoAttr=>1, RootName=>'dataroot');
# convert Perl array ref into XML document
my $data = $xml->XMLout(\@arr,outputfile => "output1.xml");
print "-----------------------------------------\n";
my $str=<<_XML_STRING_;
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<server name="sahara" osname="solaris" osversion="2.6">
<address>10.0.0.101</address>
<address>10.0.1.101</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address>10.0.0.102</address>
</server>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address>10.0.0.103</address>
<address>10.0.1.103</address>
</server>
</config>
_XML_STRING_
my $xml_ref=XMLin($str,KeepRoot => 1);
my $xml_str=XMLout($xml_ref,outputfile => "output2.xml");
print "-----------------------------------------\n";
use XML::Simple;
use Data::Dumper;
print "-----------------------------------------\n";
# create array
my @arr = [
{'country'=>'england', 'capital'=>'london'},
{'country'=>'norway', 'capital'=>'oslo'},
{'country'=>'india', 'capital'=>'new delhi'} ];
# create object
my $xml = new XML::Simple(NoAttr=>1, RootName=>'dataroot');
# convert Perl array ref into XML document
my $data = $xml->XMLout(\@arr,outputfile => "output1.xml");
print "-----------------------------------------\n";
my $str=<<_XML_STRING_;
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<server name="sahara" osname="solaris" osversion="2.6">
<address>10.0.0.101</address>
<address>10.0.1.101</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address>10.0.0.102</address>
</server>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address>10.0.0.103</address>
<address>10.0.1.103</address>
</server>
</config>
_XML_STRING_
my $xml_ref=XMLin($str,KeepRoot => 1);
my $xml_str=XMLout($xml_ref,outputfile => "output2.xml");
print "-----------------------------------------\n";
三 更多
常用参数:
xml-simple模块详细参考:http://search.cpan.org/~grantm/XML-Simple-2.18/lib/XML/Simple.pm
完!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人