[b]原始的方法[/b]
test.xml
test.pl
[b]使用XML::SimpleObject[/b]
xml
[b]生成xml[/b]
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<rows>
<row col1="AnySQL" col2="4"></row>
<row col1="DBATools" col2="1"></row>
</rows>
test.pl
use XML::Simple;
my $xml = new XML::Simple;
my $data = $xml->XMLin("c:/test.xml");
if ($data->{'row'}) {
# Convert to hash, if it's array
if (ref $data->{'row'} eq "HASH") {
@$temp = ($data->{'row'});
$data->{'row'} = $temp; }
if ($data->{'row'}->[0]) {
my $count = 0;
while($data->{'row'}->[$count]) {
if (ref $data->{'row'}->[$count] eq "HASH") {
print $data->{'row'}->[$count]->{'col1'}, ",";
print $data->{'row'}->[$count]->{'col2'}, "\n"; }
$count ++; }
} }
[b]使用XML::SimpleObject[/b]
xml
<?xml version="1.0"?>
<files>
<file type="symlink">
<name>/etc/dosemu.conf</name>
<dest>dosemu.conf-drdos703.eval</dest>
</file>
<file>
<name>/etc/passwd</name>
<bytes>948</bytes>
</file>
</files>
use XML::Parser;
use XML::SimpleObject;
my $file = 'c:/file.xml';
my $parser = XML::Parser->new(ErrorContext => 2, Style => "Tree");
my $xmlobj = XML::SimpleObject->new( $parser->parsefile($file) );
print "Files: \n";
foreach my $element ($xmlobj->child("files")->children("file"))
{
print " filename: " . $element->child("name")->value . "\n";
if ($element->attribute("type"))
{
print " type: " . $element->attribute("type") . "\n";
}else{
print " bytes: " . $element->child("bytes")->value . "\n";
}
}
[b]生成xml[/b]
use XML::Writer;
use IO::File;
my $output = new IO::File(">output.xml");
my $writer = new XML::Writer(OUTPUT => $output);
#my $writer = XML::Writer->new();
$writer->startTag("greeting",
"class" => "simple");
$writer->characters("Hello, world!");
$writer->endTag("greeting");
$writer->end();
$output->close();