CGI/Perl Guide | Learning Center | Forums | Advertise | Login
Site Search: in

  Main Index MAIN
Search Posts SEARCH
Who's Online WHO'S
Log in LOG

Home: Perl Programming Help: Beginner:
XML::Simple to convert xml to csv - see example



Apr 29, 2014, 9:06 AM

Post #1 of 1 (3152 views)
XML::Simple to convert xml to csv - see example Can't Post

hello dear perl-gurus

i do not know if this is the right forum here - but it seems to be so.

i have an issue in transforming data: i run the following code in opverpass-api - see here

i have the options to export of the data to the following formats

to GeoJSON to GPX to KML

and to get the data from

Overpass API loat them to JOSM laden (only for requests, that give back valid OSM-XML with Metadata) GeoJSON to save it as gist

note - i did not install the overpass-api on my opensuse 13.1 yet. but i am willing to do so.

as for now - running the above mentioned code in the oerpass-api - here. how to treat it to get it exported as csv-formated

hope i was able to provide all the necessary things for a clear and concise question. See the output that needs to be transformed:

<?xml version="1.0" encoding="UTF-8"?> 
<osm version="0.6" generator="Overpass API">
<note>The data included in this document is from The data is made available under ODbL.</note>
<meta osm_base="2014-04-27T13:49:02Z"/>

<node id="297489767" lat="49.4085014" lon="8.6941465">
<tag k="addr:city" v="Heidelberg"/>
<tag k="addr:housenumber" v="23"/>
<tag k="addr:postcode" v="69115"/>
<tag k="addr:street" v="Sofienstraße"/>
<tag k="name" v="ARLT"/>
<tag k="phone" v="+49 6221 20229"/>
<tag k="shop" v="computer"/>
<tag k="source" v="survey"/>
<tag k="website" v=""/>
<tag k="wheelchair" v="yes"/>
<node id="305144906" lat="49.4060012" lon="8.6929652">
<tag k="addr:city" v="Heidelberg"/>
<tag k="addr:country" v="DE"/>
<tag k="addr:housenumber" v="13-15"/>
<tag k="addr:postcode" v="69115"/>
<tag k="addr:state" v="Baden-Württemberg"/>
<tag k="addr:street" v="Rohrbacher Straße"/>
<tag k="name" v="Heidel-bike"/>
<tag k="opening_hours" v="Tu-Fr 10:00-18:30; Sa 10:00-14:00"/>
<tag k="shop" v="bicycle"/>
<tag k="website" v=""/>
<tag k="wheelchair" v="yes"/>
<node id="305963167" lat="49.4139877" lon="8.6924247">
<tag k="addr:city" v="Heidelberg"/>
<tag k="addr:country" v="DE"/>
<tag k="addr:housenumber" v="4"/>
<tag k="addr:postcode" v="69120"/>
<tag k="addr:street" v="Brückenstraße"/>
<tag k="name" v="Buchhandlung Schmitt &amp; Hahn"/>
<tag k="shop" v="books"/>
<tag k="wheelchair" v="no"/>

well - perhaps we can do this like so:

to use Perl for text-mangling - so we can use the XML::Simple module. here's an example of a little script to parse the XML:

use strict;
use warnings;
use XML::Simple;
use Data::Dumper;

my $xmlfile = shift || die "Usage: $0 <XML_FILE>\n";

my $ref;
eval {
$ref = XMLin($xmlfile,
ForceArray => 0,
KeyAttr => [ ],
SuppressEmpty => '',
) or die "Can't read XML from $xmlfile: $!\n";
die $@ if($@);
print Dumper $ref;

Explantion: iterating thru the array/hash it creates the file and helps carving up the data into comma separated lines of data than can be redirected to file.

can i do this to get the csv-output?


Search for (options) Powered by Gossamer Forum v.1.2.0

Web Applications & Managed Hosting Powered by Gossamer Threads
Visit our Mailing List Archives