[Xml-compile] Re: XML::LibXML::Simple nil and restructuring
Mark Overmeer
mark at overmeer.net
Tue Jun 18 07:45:59 GMT 2013
Hi Joshua,
Please post to the list.
* Joshua Keroes (joshua at keroes.com) [130617 23:15]:
> I'm proxying requests to an unhelpful API, trying to make lookups easier
> (done), and trying to "fix" their XML (done with XML::LibXML::Simple and
> Data::Visitor but slow), and returning the response to the user.
> With options *keyattr => [qw/ name description /], forcearray => [qw/ rows
> r c /]*, X::L::S converts that to:
>
> * 'rows' => [*
> * {*
> * 'r' => [*
> * {*
> * 'c' => [*
> * {*
> * 'xsi:nil' => 'true',*
> * 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance
> '*
> * },*
...
> * ],*
> * 'properties' => {*
> * 'property' => {*
> * 'type' => 'int',*
> * 'content' => '0',*
> * 'name' => 'healthIndex'*
> * }*
> * },*
> * 'cellproperties' => {}*
> * }*
> * ]*
> * }*
> * ]*
>
> Thing 1: I would like to see *undef* instead of* { 'xsi:nil' ... }* blocks.
> e.g. *c => [ undef, undef, undef ] . *I have a Data::Visitor solution that
> can do this but it's slow.
XML::LibXML::Simple is just a reimplementation of the XML::Simple
interface using the XML::LibXML parser. It is not more clever.
> Thing 2: *r* and *c* are just arrays. They don't need to be named arrays.
> Did I miss a way to eat those keys? In other words, what I'd like to see is:
>
> * rows => [*
> * [ undef, undef, undef ],*
> * ]*
> *
> And for responses with more complex data:
>
> * rows => [*
> * [ 1.0, 2.2, 4.1 ],*
> * [ 1.0, 2.1, 4.0 ],*
> * [ 1.0, 2.2, 4.1 ],*
> * ]*
When the data structure is so well known, it is easy to avoid the use
of Data::Visitor. Something like this (untested)
my $rows = ....
my @r;
foreach my $r (@{$rows->[0]{r}})
{ my @c;
foreach my $c (@{$r->[0]{c}})
{ push @c, ref $c eq 'HASH' && $c->{'xsi:nil'} ? undef : $c;
}
push @r, \@c;
}
\@r;
Not more complex than this. (You loose the 'properties' info')
--
Regards,
MarkOv
------------------------------------------------------------------------
Mark Overmeer MSc MARKOV Solutions
Mark at Overmeer.net solutions at overmeer.net
http://Mark.Overmeer.net http://solutions.overmeer.net
More information about the Xml-compile
mailing list