I have a file on a server that I want to parse in Perl. I've tried it with XML:Simple
and XML:LibXML
and I can't get the xml elements in both cases.
This is my .xml file:
<csixml version="1.0">
<head>
<details>
<name-link>linkName</name-link>
<table>links</table>
<model>XS1-556</model>
</details>
<fields>
<field name="name1" />
<field name="name2"/>
<field name="name3"/>
<field name="name4"/>
<field name="name5"/>
<field name="name6" />
<field name="name7"/>
<field name="name8"/>
<field name="name9"/>
<field name="name10"/>
<field name="name11"/>
<field name="name12x"/>
<field name="name13"/>
<field name="name14"/>
<field name="name15"/>
<field name="name16"/>
<field name="name17"/>
</fields>
</head>
<data>
<record time="2017/06/01 00:00:00" no="742">
<v1>14.85</v1>
<v2>34.1</v2>
<v3>600</v3>
<v4>0</v4>
<v5>0</v5>
<v6>0</v6>
<v7>0</v7>
<v8>11.22</v8>
<v9>0.41</v9>
<v10>215</v10>
<v11>7.043</v11>
<v12>1.325</v12>
<v13>2017-05-31T23:47:14</v13>
<v14>202.3</v14>
<v15>0</v15>
<v16>42.85</v16>
<v17>12.25</v17>
</record>
</data>
</csixml>
And this is the code :
my $parser = new XML::Simple;
$data = $parser->XMLin( get( $url ));
#print Dumper($data);
print $data->{'r'}[0]{'v1'};
print $data->{'r'}[1]{'v2'};
When I try it with XML:LibXML it gives me an error that says:
Start tag expected, '<' not found
I've tryed all of thoose solutions but finally I found it:
my ($_xml) = new XML::Simple (KeyAttr=>[]);
my $url = 'http://www.example.com';
my $agent = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $url);
$request->content_type('application/xml');
my $response = $agent->request($request);
if ($response->is_success) {
print "HTTP response is good\n";
my ($_message) = $response->decoded_content;
my ($_data) = $_xml->XMLin($_message,ForceArray => 1);
foreach my $_e (@{$_data->{data}})
{
foreach my $_r (@{$_e->{r}})
{
print $_r->{time}.": ".$_r->{no}."\n";
}
}
} else {
die "Awooga! HTTP request failed with ". $response->status_line;
}
Finally I use XML:Simple
and I get my xml elements with: $_r->{time}
and it works great. I hope this will help someone, thanks to everyone!!