Extracting information from XML to excel


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extracting information from XML to excel
# 1  
Old 02-10-2014
Extracting information from XML to excel

Hi,

I am trying to extract information from a XML file and write it to a excel sheet. I am not sure where to start from. Here is the content from my input XML file.

Code:
    <com.cloudbees.hudson.plugins.folder.properties.FolderProxyGroupContainer plugin="nectar-rbac@4.5">
      <groups>
        <nectar.plugins.rbac.groups.Group>
          <name>ATSCMViewer</name>
          <member>mmapp</member>
          <member>mmdep</member>
          <member>mmdev</member>
          <member>mmtest</member>
          <role>Viewer</role>
        </nectar.plugins.rbac.groups.Group>
        <nectar.plugins.rbac.groups.Group>
          <name>ATSCMIntegrator</name>
          <member>mmINT</member>
          <role>Integrator</role>
          <role>Viewer</role>
        </nectar.plugins.rbac.groups.Group>
      </groups>
      <roleFilters>
        <string>anonymous</string>
        <string>authenticated</string>
        <string>Developer</string>
      </roleFilters>
    </com.cloudbees.hudson.plugins.folder.properties.FolderProxyGroupContainer>

The Output in excel I am looking for is

Code:
column1           column2       column3
<name>              <role>       <member>
ATSCMViewer        Viewer         mmapp
                                  mmdep
                                  mmdev
                                  mmtest

ATSCMIntegrator    Integrator     mmINT
                    Viewer

# 2  
Old 02-11-2014
Try this...
Code:
awk -F'>|<' '
  /<nectar.plugins.rbac.groups.Group>/{s=1}
  /<\/nectar.plugins.rbac.groups.Group>/{
    for(i=j+1;i<=m;i++) printf("%-30s%10s\n", "", mem[i])
    delete(mem)
    j=s=m=0
  }
  s && /name/{name=$3}
  s && /member/{mem[++m]=$3}
  s && /role/{
    if(++j==1) printf("\n%-20s%-10s%10s\n", name, $3, mem[1])
    else printf("%-20s%-10s%10s\n", "", $3, mem[j])
  }' infile

Please do show some effort!

--ahamed
This User Gave Thanks to ahamed101 For This Post:
# 3  
Old 02-11-2014
Code:
$ cat file
    <com.cloudbees.hudson.plugins.folder.properties.FolderProxyGroupContainer plugin="nectar-rbac@4.5">
      <groups>
        <nectar.plugins.rbac.groups.Group>
          <name>ATSCMViewer</name>
          <member>mmapp</member>
          <member>mmdep</member>
          <member>mmdev</member>
          <member>mmtest</member>
          <role>Viewer</role>
        </nectar.plugins.rbac.groups.Group>
        <nectar.plugins.rbac.groups.Group>
          <name>ATSCMIntegrator</name>
          <member>mmINT</member>
          <role>Integrator</role>
          <role>Viewer</role>
        </nectar.plugins.rbac.groups.Group>
      </groups>
      <roleFilters>
        <string>anonymous</string>
        <string>authenticated</string>
        <string>Developer</string>
      </roleFilters>
    </com.cloudbees.hudson.plugins.folder.properties.FolderProxyGroupContainer>

Code:
$ cat tester.sh
awk  '
           function out(){
		           for(k=1;k<=MF;k++)
			   print ARR["N",k],ARR["R",k],ARR["M",k]
		           delete ARR
	                 }

                   NR==1 {
			   print "column1" OFS "column2" OFS "column3" RS  "<name>" OFS "<role>" OFS "<member>"
		         }

	         /<name>/{	 
	     		  if(flag==1){
					out()
					flag = n = m = r = 0
				     }	
	     		  ARR["N",++n] = $3
   			 }

	      /<member>/{
			  ++k
	     		  ARR["M",++m] = $3
	     		  MF = m
			}

		/<role>/{
             		  ARR["R",++r] = $3
	     		  flag=1
			  MF = MF > r ? MF : r
			}

	            END {
			  out()
			}
      ' OFS="\t" FS="[>|<]" file

Resulting
Code:
$ sh tester.sh
column1	column2	column3
<name>	<role>	<member>
ATSCMViewer	Viewer	mmapp
		mmdep
		mmdev
		mmtest
ATSCMIntegrator	Integrator	mmINT
	Viewer

if you need csv change OFS="\t" to OFS="," , that would result
Code:
$ sh tester.sh
column1,column2,column3
<name>,<role>,<member>
ATSCMViewer,Viewer,mmapp
,,mmdep
,,mmdev
,,mmtest
ATSCMIntegrator,Integrator,mmINT
,Viewer,


Last edited by Akshay Hegde; 02-11-2014 at 01:17 AM.. Reason: formatting...and color as well
This User Gave Thanks to Akshay Hegde For This Post:
# 4  
Old 04-08-2014
Hello Akshay,

Thanks a lot for the great code, could you please explain the same.
Specially the function part, will be grateful to you.


Thanks,
R. Singh
# 5  
Old 04-08-2014
Quote:
Originally Posted by RavinderSingh13
Hello Akshay,

Thanks a lot for the great code, could you please explain the same.
Specially the function part, will be grateful to you.


Thanks,
R. Singh
Function just prints array elements, once after loop array will be deleted

Read following


An Awk Primer/Arrays - Wikibooks, open books for an open world

https://www.cs.utah.edu/dept/old/tex...k/gawk_12.html

Thanks!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[Solved] Extracting information from DDL's

Dear Experts, I need your help here. I have lot of teradata DDL's as follows, i want to extract field names , field attributes and NOT NULL information from DDL.Could you please help here. Sample DDL: CREATE MULTISET TABLE APS_CALL_IN_PICKUP_CANCELED ,NO FALLBACK , NO BEFORE... (2 Replies)
Discussion started by: srikanth38
2 Replies

2. Shell Programming and Scripting

Extracting information using awk

I want to write a script that extracts a value from a line of text. I know it can be done using awk but I've never used awk before so I don't know how to do it. The text is: Mem: 100M Active, 2150K Cache, 500M Buf, 10G Free I want to extract the free memory value to use as a variable. In... (5 Replies)
Discussion started by: millsy5
5 Replies

3. Shell Programming and Scripting

Problems extracting some information

Hi there! Well, I'm writing a script to obtain certain information about files. Specifically, I want to get the information about those files which last access were in the last 24 hours, so I'm doing something like this: find <directory_name> -atime -1 -printf '%f %a\n' I would also... (4 Replies)
Discussion started by: Skirmish
4 Replies

4. Shell Programming and Scripting

Extracting relevant information from syslogs.

I need to analyse some syslogs and I want to print out all the lines containing SSH connections to the inside interface of the firewall and ignore lines where the originating port is 22. So basically I want to print all matches after "to inside:" that contains /22 and ignore lines where /22 occur... (2 Replies)
Discussion started by: lewk
2 Replies

5. Shell Programming and Scripting

extracting information from multiple files

Hello there, I am trying to extract (string) information ( a list words) from 4 files and then put the results into 1 file. Currently I am doing this using grep -f list.txt file1 . and repeat the process for the other 3 files. The reasons i am doing that (a) I do know how to code (b) each file... (4 Replies)
Discussion started by: houkto
4 Replies

6. UNIX for Dummies Questions & Answers

Combining information from Excel files

Hi, I am looking for an AWK or grep script (join will not work here since the data is not sorted) to combine two Excel files that look lke this: Infile1: Georgia Atlanta 1234 1234 Georgia Marrieta 2134 2134 Georgia Scottdale 3414 3414 Georgia Clarkston 2321 2321 Infile2: ... (6 Replies)
Discussion started by: Xterra
6 Replies

7. Programming

extracting information from lines, put them into arrays

hi I need a little help writing this small perl script. I'm trying to extract the values from each line in a file and find the average for example cat school Highschool 100, 123, 135 Middleschool 41, 67, 54 Elementary 76, 315, 384 ./average.pl highschool: 119.3 middleschool: 54... (2 Replies)
Discussion started by: gengar
2 Replies

8. Shell Programming and Scripting

Problems with extracting information

Hi all, <select name="comp" id="comp" style="width:130px;"> <?php $sqlcomp = mysql_query("SELECT * FROM comp"); while ($redcomp = mysql_fetch_array($sqlcomp)) { extract($redcomp); echo "<option value=\"$comp_id\">comp_name</option>"; } ?> ... (0 Replies)
Discussion started by: c0mrade
0 Replies

9. UNIX for Dummies Questions & Answers

Extracting information from text fields.

Dear friends, I'm a novice Unix user and I'm trying to learn the ropes. I have a big task I have to accomplish and I'm convinced Unix can get the job done, I just haven't figured out how. I recently posted on the topic of cutting text between unique text patterns and somebody helped me a great... (24 Replies)
Discussion started by: spindoctor
24 Replies

10. Shell Programming and Scripting

Extracting information from a template

I have a template that I usually use to generate stats on an hourly basis for a number of cell sites altogether. I would like to be able to write a script that would go to the template and extract the information for any single site at any time during the day. For example, let's say that my... (4 Replies)
Discussion started by: Ernst
4 Replies
Login or Register to Ask a Question