#!/usr/bin/env perl
use strict;
use warnings;
use XML::Simple;
use utf8;
use open ":utf8";
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
my $xml_str = join('', <>);
my $xs = new XML::Simple();
my $ref = $xs->XMLin($xml_str);
my @list = (["xml", $ref]);
while (my $rs = shift @list) {
my ($label, $ri) = @$rs;
my $rf = ref($ri);
if ($rf eq "HASH") {
foreach my $k (sort keys %{$ri}) {
push @list, ["$label/$k", $ri->{$k}];
}
} elsif ($rf eq "ARRAY") {
for (my $i = 0; $i < @$ri; $i++) {
push @list, ["$label/\@".$i, $ri->[$i]];
}
} else {
print qq($label\t$ri\n);
}
}
% head B00EOEZJ90.xml <?xml version="1.0" ?><ItemLookupResponse ... </HTTPHeaders> <RequestId>...</RequestId> <Arguments><Argument Name="AWSAccessKeyId" Value="..."></Argument> <Argument Name="AssociateTag" Value="137439-22"></Argument> <Argument Name="ItemId" Value="B00EOEZJ90"></Argument> <Argument Name="Operation" Value="ItemLookup"></Argument> <Argument Name="ResponseGroup" Value="Large,VariationMatrix"></Argument> <Argument Name="Service" Value="AWSECommerceService"></Argument> <Argument Name="Timestamp" Value="2018-08-23T08:01:24Z"></Argument> % xml2tsv.pl B00EOEZJ90.xml | head xml/xmlns http://webservices.amazon.com/AWSECommerceService/2011-08-01 xml/OperationRequest/RequestId ... xml/OperationRequest/RequestProcessingTime 0.1334097060000000 xml/Items/Item/ASIN B00EOEZJ90 xml/Items/Item/DetailPageURL ... xml/Items/Item/ParentASIN B00LWHUW58 xml/Items/Item/SalesRank 109 xml/Items/Request/IsValid True xml/Items/Item/CustomerReviews/HasReviews true xml/Items/Item/CustomerReviews/IFrameURL ...