Sponsored Content
Top Forums Shell Programming and Scripting Using shell command need to parse multiple nested tag value of a XML file Post 302882919 by Akshay Hegde on Thursday 9th of January 2014 04:01:59 PM
Old 01-09-2014
You may try, might not be intelligent as one Corona posted, but for given sample it works.
Code:
awk '
    !f && /<(.*)>$/{
                     s=$0; f=g=1
                     gsub(/</,"</",s)
                     next
                   }
                 f{
                     g=(/<(.*)>/ && !/<\/(.*)>$/)?0:g
                     if(/\<(.*)>(.*)<\/(.*)>/){
                                                  gsub(/[<>]|<\//,"|")
                                                  split($0,A,"|")
                                                  com = g == 1 ? com ? com OFS A[3] : A[3] : com
                                                  dat = g == 0 ? dat ? dat OFS A[3] : A[3] : dat 
                                                  hea = m ? hea : hea ? hea OFS A[2]"_CDATA" : A[2]"_CDATA"
                                              }
                      if(/<\/(.*)>$/ && $0!~s){
                                             ++d
                                             if(d==count){
                                                           print m ? com OFS dat : hea RS com OFS dat
                                                           dat="";d=0;m=1
                                                         }  
                                              }
                   }
               $0~s{
                       f=s=com=d=""
                   }
     ' count="1" OFS="\t" test.xml

Code:
$ cat test.xml
<gp>
    <mms>1110012</mms>
    <tg>988</tg>
    <mm>LongTime</mm>
    <lv>
        <lkid>StartEle=ONE, Desti = Motion</lkid>
        <kk>12</kk>
    </lv>
    <lv>
        <lkid>StartEle=ONE, Source = Velocity</lkid>
        <kk>2</kk>
    </lv>
    <lv>
        <lkid>StartEle=ONE, Source = Park</lkid>
        <kk>2</kk>
    </lv>
</gp>

<gp>
    <mms>2221100</mms>
    <tg>989</tg>
    <mm>LongVelocity</mm>
    <lv>
        <lkid>StartEle=ONE, Source = Velocity</lkid>
        <kk>772</kk>
    </lv>
    <lv>
        <lkid>StartEle=ONE, Desti = Motion</lkid>
        <kk>900</kk>
    </lv>
    <lv>
        <lkid>StartEle=ONE, Source = Park</lkid>
        <kk>2</kk>
    </lv>
</gp>

Code:
mms_CDATA  tg_CDATA  mm_CDATA       lkid_CDATA            kk_CDATA
1110012    988       LongTime        StartEle=ONE, Desti = Motion       12
1110012    988       LongTime        StartEle=ONE, Source = Velocity    2
1110012    988       LongTime        StartEle=ONE, Source = Park        2
2221100    989       LongVelocity    StartEle=ONE, Source = Velocity    772
2221100    989       LongVelocity    StartEle=ONE, Desti = Motion       900
2221100    989       LongVelocity    StartEle=ONE, Source = Park        2

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

big xml file with nested loop parse

I have an xml file with the structure: <tag1> <value1>xyx</value1> <value2>123</value2> </tag1> <tag1> <value1>568</value1> <value2>zzzzz</value2> </tag1> where I want to parse each data pair in the this single file, so something like: find first tag1 data pair... (1 Reply)
Discussion started by: unclecameron
1 Replies

2. Shell Programming and Scripting

shell command to remove some XML tag is needed

Hi all, I have a file which i have to remove some line from it, the lines that i have to remove from my file is as below: </new_name></w"s" langue="Fr-fr" version="1.0" encoding="UTF-8" ?> <New_name> and it is finding at the middle of my file, is there any command line in linux to do it or do... (10 Replies)
Discussion started by: id_2pc
10 Replies

3. Shell Programming and Scripting

How to add the multiple lines of xml tags before a particular xml tag in a file

Hi All, I'm stuck with adding multiple lines(irrespective of line number) to a file before a particular xml tag. Please help me. <A>testing_Location</A> <value>LA</value> <zone>US</zone> <B>Region</B> <value>Russia</value> <zone>Washington</zone> <C>Country</C>... (0 Replies)
Discussion started by: mjavalkar
0 Replies

4. Shell Programming and Scripting

awk Script to parse a XML tag

I have an XML tag like this: <property name="agent" value="/var/tmp/root/eclipse" /> Is there way using awk that i can get the value from the above tag. So the output should be: /var/tmp/root/eclipse Help will be appreciated. Regards, Adi (6 Replies)
Discussion started by: asirohi
6 Replies

5. Emergency UNIX and Linux Support

Trying to parse a xml file for only one tag

I have a xml file in where I need to parse only a particular tag and print the output in the shell script. Here is the tag info in the xml file <dp:file> This is dp file output </dp:file> Output should be printed as This is dp file output. Please help.Thank you. (5 Replies)
Discussion started by: chandu123
5 Replies

6. Shell Programming and Scripting

XML Parse between to tag with upper tag

Hi Guys Here is my Input : <?xml version="1.0" encoding="UTF-8"?> <xn:MeContext id="01736"> <xn:VsDataContainer id="01736"> <xn:attributes> <xn:vsDataType>vsDataMeContext</xn:vsDataType> ... (12 Replies)
Discussion started by: pareshkp
12 Replies

7. Shell Programming and Scripting

Creating multiple xml tag lines in a file

Hi All, Can someone tell me how can we create same xml tag lines based on the number of lines present in other file and replace the Name variable vaule present in other file. basically I have this xml line <typ:RequestKey NameType="RIC" Name="A1" Service="DDA"/> and say I... (4 Replies)
Discussion started by: Optimus81
4 Replies

8. Shell Programming and Scripting

XML files with spaces in the tag name, parse & display?

Greetings all, I have an XML file that is being generated from my application, here is a sample of the first tag (That I am trying to remove and display in a list..) Example- <tag one= "data" data="1234" updateTime="1300"> <tag one= "data1" data="1234" updateTime="1300"> <tag... (5 Replies)
Discussion started by: jeffs42885
5 Replies

9. Shell Programming and Scripting

Moving XML tag/contents after specific XML tag within same file

Hi Forum. I have an XML file with the following requirement to move the <AdditionalAccountHolders> tag and its content right after the <accountHolderName> tag within the same file but I'm not sure how to accomplish this through a Unix script. Any feedback will be greatly appreciated. ... (19 Replies)
Discussion started by: pchang
19 Replies

10. UNIX for Beginners Questions & Answers

Grepping multiple XML tag results from XML file.

I want to write a one line script that outputs the result of multiple xml tags from a XML file. For example I have a XML file which has below XML tags in the file: <EMAIL>***</EMAIL> <CUSTOMER_ID>****</CUSTOMER_ID> <BRANDID>***</BRANDID> Now I want to grep the values of all these specified... (1 Reply)
Discussion started by: shubh752
1 Replies
Imager::LargeSamples(3pm)				User Contributed Perl Documentation				 Imager::LargeSamples(3pm)

NAME
Imager::LargeSamples - track/document large sample support SYNOPSIS
# make a large sample image my $im = Imager->new(..., bits => 16); # call some method my $result = $im->$method(...); # was the image modified at its full sample size DESCRIPTION
Imager has had in-memory support for large samples for years now, but many methods still don't work at the higher sample size when supplied with a large sample image. This document will track which methods support large samples and which don't, for future improvements. Support by method Method Support Notes ------ ------- ----- arc Partial [1] box Partial [2] circle Partial [1] convert Full copy Full crop Full difference Full filter Partial Depends on the filter. flip Full flood_fill Partial [1] getpixel Full getsamples Full getscanline Full map None masked Full matrix_transform Full paste Full polygon Partial [1] polyline None read Partial See L<File format large sample support> read_multi Partial See L<File format large sample support> rotate Full rubthrough Full scale Partial Some qtypes support large samples scaleX None scaleY None setpixel Full setscanline Full string Full Preserves large samples, but most font drivers generate 8 or fewer bits of levels of coverage. transform None transform2 None write Partial See L<File format large sample support> write_multi Partial See L<File format large sample support> [1] filling an area using the fill parameter works at the full depth of the image, using filled => 1 and color works at 8-bits/sample [2] box() will fill the area at the supplied color, but outline at 8-bits/sample. File format large sample support Format Format samples Imager support ------ -------------- -------------- BMP 8 8 GIF 8 8 ICO 8 8 JPEG 8, 12 8 PBM 1 1 PGM/PPM 1-16 read any, writes 8, 16 PNG 1, 2, 4, 8, 16 8 RAW 8 SGI 8, 16 8, 16 TGA 8 8 TIFF (many) read/write 8, 16, 32 contig rgb/grey images read/write bi-level read/write 4/8 paletted images Filter larger sample support Filter Large sample support ------ -------------------- autolevels No bumpmap No bumpmap_complex No contrast No conv Yes fountain Yes gaussian Yes gradgen No hardinvert Yes mosaic No postlevels No radnoise No turbnoise No unsharpmask Yes watermark No AUTHOR
Tony Cook <tonyc@cpan.org> perl v5.14.2 2011-06-06 Imager::LargeSamples(3pm)
All times are GMT -4. The time now is 02:24 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy