Convert XML to CSV using awk or shell script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Convert XML to CSV using awk or shell script
# 1  
Old 01-09-2015
Convert XML to CSV using awk or shell script

Hello,

I am working on a part of code where I need a awk or shell script to convert the given XML file to CSV or TXT file.

There are multiple xml files and of different structure, so a single script is required for converting data.

I did find a lot of solutions in the forum but none of the awk scripts mentioned here work for me as my XML contains Singletags <tag/> too and they are not parsed properly.

Thanks in advance for your help.

Rashmitha
# 2  
Old 01-09-2015
Hi! Welcome to Forums,

Please show a representative sample of input, desired output, attempts at a solution and specify what OS and versions are being used.

Thank you.
# 3  
Old 01-09-2015
I have a slightly more capable than average awk tinkertoy parser, which should be able to handle single tags properly, but it will need to be modified for your purposes. It needs to be told which tags to keep and how.

So, please post your input data and the output you want.
# 4  
Old 01-12-2015
Thanks for the reply.

Here is the Sample data:
Code:
<Orders>
<Partner>TTTT</Partner>
<Order>
<OrderType>test</OrderType>
<OrderNumber>1000000000</OrderNumber>
<OrderSource/>
<OrderDate>11/14/2014 12:00:00 AM</OrderDate>
..
..
..
..
<BillingAddress>
<Line1>XXXX</Line1>
<Line2/>
<City>stsss</City>
<State>gg</State>
<PostalCode>101010</PostalCode>
<CountryCode>aaaaa</CountryCode>
<Name>mmmmmm</Name>
</BillingAddress>
<ShippingAddress>
<NumberOfItems>3</NumberOfItems>
<Name>mmmmm</Name>
<Line1>abcd</Line1>
<Line2/>
<City>xyz</City>
<State>sjsdjhi</State>
<PostalCode>101010</PostalCode>
<CountryCode>kkkkkk</CountryCode>
<Method>test</Method>
<tag>False</tag>
</ShippingAddress>
<ShippingAddress>
<NumberOfItems>1</NumberOfItems>
<Name>mmmmm</Name>
<Line1>abcd</Line1>
<Line2/>
<City>xyz</City>
<State>sjsdjhi</State>
<PostalCode>101010</PostalCode>
<CountryCode>kkkkkk</CountryCode>
<Method>test</Method>
<tag>False</tag>
</ShippingAddress>
<Item>
<Name>Item1</Name>
<Quantity>3</Quantity>
<UnitPrice>15.99</UnitPrice>
<Eligible>False</Eligible>
<OrderStatus>test</OrderStatus>
<SKU>5-100000</SKU>
</Item
<Item>
<Name>Item2</Name>
<Quantity>1</Quantity>
<UnitPrice>10.49</UnitPrice>
<Eligible>True</Eligible>
<OrderStatus>test</OrderStatus>
<SKU>5-100001</SKU>
</Item>
</Order>
<Order>
..
</Order>
</Orders>

In the Output I need all the tags as Columns. The output file can be CSV or txt file. With the current script, single close tags are not parsed.

Regards,
Rashmitha

Last edited by Corona688; 01-12-2015 at 11:25 AM..
# 5  
Old 01-12-2015
Try thic if it works.

Code:
BEGIN {     FS=",";     OFS = "\n"} NR == 1 {for (i = 1; i <=NF; i++)             tag[i]=$i          print "<abc version=\"3.4.1\" urlbase=\"http://mozilla.com/\" maintainer=\"somebody@mozilla.com\" exporter=\"somebody.else@mozilla.com\">"} NR != 1 {print "   <bug>"          for (i = 1; i <= NF; i++)             print "      <" tag[i] ">" $i "</" tag[i] ">"          print "   </bug>"} END {print "</abc>"}


Last edited by Corona688; 01-12-2015 at 11:26 AM..
# 6  
Old 01-12-2015
Okay, you have shown half of what you want.

Now we need the other half -- the output you want.

What you are asking for, "each tag as a column", makes no sense since your data includes many nested, non-tabular things. There'd be a huge amount of duplication at the very least.
# 7  
Old 01-12-2015
"This wont work!", was my first thought.
A technicaly halftruth/incorecctness, but helpfull to create a better image, saying would be:

XML is like a Database, whereas CSV/TXT is a Tablesheet at best.

It is NO problem to make all data from a table into a database,but moving a database into a table, even when there are only 5 entries, is already rather complex. (unless the DB was used as a simple table Smilie)
You need to decide which values/cathegories you want to drop in favor of more important data, OR which values you want to store in another file - if you want to preserve ALL data.

hth
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Covert xml to csv using xsltproc in shell script

Hi, I am not familiar with shell scripting. Please help to convert xml files to csv files using xsltproc command in bash script. Find the xml sample <?xml version="1.0"?> -<Source xmlns="link"> <CompanyCd>DSP</CompanyCd> <SrcSysCd>DSPS</SrcSysCd> <CountryCd>45</CountryCd> ... (2 Replies)
Discussion started by: mathina
2 Replies

2. Shell Programming and Scripting

How to convert xml to csv ?

I am in need of converting billions of XML into csv file to load data to DB, i have found the below code in perl but not sure why it's not working properly. CODE: #!/usr/bin/perl # Script to illustrate how to parse a simple XML file # and pick out all the values for a specific element, in... (1 Reply)
Discussion started by: rspwilliam
1 Replies

3. Shell Programming and Scripting

Convert xml to csv

I need to convert below xml code to csv. I searched other posts as well but this post (_https://www.unix.com/shell-programming-scripting/174417-extract-parse-xml-data-statistic-value-csv.html) gives "sed command garbled" error. As of now I have written a long script to do it, but can it be done with... (7 Replies)
Discussion started by: dineshydv
7 Replies

4. Shell Programming and Scripting

awk convert xml to csv

Hi, I have an xml file and I want to convert it with awk in to a csv file Test.xml <Worksheet ss:Name="Map1"> <Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="2" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"> <Row> <Cell><Data... (6 Replies)
Discussion started by: research3
6 Replies

5. Shell Programming and Scripting

Convert XML to Data File in Shell Script

Hi All, I will be getting a huge XML file with a lot of records in it. I need to convert it into multiple data files. SAMPLE XML FILE <ABSProductCatalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <ProductSalesHierachy> - <Portfolios> - <Portfolio productCode="P1"> ... (8 Replies)
Discussion started by: ragha81
8 Replies

6. Shell Programming and Scripting

Awk script to convert csv to html

Hi Written some script to convert csv to html but could not add table headers.Below are the errors iam getting ./csv2html | more + awk -v border=1 -v width=10 -v bgcolor=black -v fgcolor=white BEGIN { printf("<table border=\"%d\" bordercolor=\"%s\" width=\"%d\"... (2 Replies)
Discussion started by: zeebala1981
2 Replies

7. Shell Programming and Scripting

Convert XML to CSV format

Can any one give the idea on this, please. I have the following XML file and wants to convert into CSV(comma separated value) format. <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'> <Waveset> <Object name='ra8736'> <Attribute name='ADDRESS'... (2 Replies)
Discussion started by: kumar04
2 Replies

8. Shell Programming and Scripting

convert this into csv using awk/shell script

Hi Scripting gurus, I need to convert following text snippet into csv. please help Input heading1 = data1 heading2 = data2 .. .. heading n = data n heading 1 = data1 .. .. Output data1,data2,....,data n (3 Replies)
Discussion started by: azs0309
3 Replies

9. Shell Programming and Scripting

Help to convert XML to CSV

Apologies if this has already been covered in this site somewhere, I did try looking but without any success. I am new to the whole XML thing, very late starter, and have a requirement to convert an XML fiule to a CSV fomat. I am crrently working on a Solaris OS. Does anyone have any suggestions,... (2 Replies)
Discussion started by: rossingi_33
2 Replies

10. Shell Programming and Scripting

Sample Unix script file to convert .xml to .csv

Dear all, Can you send me a script file the changes .xml to .csv file. Thanks, Srinivasa (4 Replies)
Discussion started by: srinivasaphani
4 Replies
Login or Register to Ask a Question