Parsing XML using shell script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing XML using shell script
# 1  
Old 04-24-2012
Java Parsing XML using shell script

Well, issue is i have to parse this script to get the VERSION:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleAllowMixedLocalizations</key>
    <true/>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>Adobe AIR</string>
    <key>CFBundleIconFile</key>
    <string>Adobe AIR</string>
    <key>CFBundleIdentifier</key>
    <string>com.adobe.AIR</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleVersion</key>
    <string>3.1.0.4880</string>
    <key>NSHumanReadableCopyright</key>
    <string>Copyright © 2007-2011 Adobe Systems Inc.</string>
</dict>
</plist>

So i want shell script to read this entry only the version and perform an operation if the version number is less than the given number.

Thanks a lot in advance!!
# 2  
Old 04-24-2012
Code:
$ awk -F"[<>]" '/CFBundleVersion/ {getline;print $3;exit}' input.xml
3.1.0.4880

This User Gave Thanks to itkamaraj For This Post:
# 3  
Old 04-24-2012
Java

Thanks itkamaraj Smilie

pardon me, actually i am totally new to shell scripting.

one more thing is, how can i retrieve this value in a variable? Smilie



Again thanks a lot!
# 4  
Old 04-24-2012
Code:
variable_sto_store=`awk -F"[<>]" '/CFBundleVersion/ {getline;print $3;exit}' input.xml`
 
If you want to capture it outside.

These 2 Users Gave Thanks to panyam For This Post:
# 5  
Old 04-25-2012
thanks panyam
# 6  
Old 04-25-2012
To exactly retrieve the value from an XML file, you need to use an XML tool such as xmllint. It comes with Linux by default.
Code:
$ version=`xmllint --xpath '/plist/dict/key[text()="CFBundleVersion"]/following-sibling::string[position()=1]/text()' input.xml`

$ echo $version
3.1.0.4880

This User Gave Thanks to chihung For This Post:
# 7  
Old 04-25-2012
Here is my sample xml file; I'm interested in pulling out the following
COUNTRY POSTAL_CODE STREET_BASE_NAME


Code:
<?xml version="1.0" encoding="UTF-8"?>
<RECORDS PS3_VERSION="1104_01"><RECORD>
<POI_ID>931</POI_ID>
<SUPPLIER_ID>2</SUPPLIER_ID>
<POI_PVID>997920846</POI_PVID>
<DB_ID>1366650925</DB_ID>
<REGION>H1</REGION>
<POI_NAME NAME_TYPE="Official" LANG_CODE="HUN">coop</POI_NAME>
<TRANS_POI_NAME NAME_TYPE="Trans Official" LANG_CODE="ENG">coop</TRANS_POI_NAME>
<CATEGORY>5400</CATEGORY>
<CATEGORY_NAME>Grocery Store</CATEGORY_NAME>
<STREET_BASE_NAME>Dózsa György</STREET_BASE_NAME>
<TRANS_STREET_BASE_NAME>Dózsa György</TRANS_STREET_BASE_NAME>
<STREET_TYPE>út</STREET_TYPE>
<TRANS_STREET_TYPE>út</TRANS_STREET_TYPE>
<ADMIN4>Kóka</ADMIN4>
<TRANS_ADMIN4>Kóka</TRANS_ADMIN4>
<ADMIN3>Kóka</ADMIN3>
<TRANS_ADMIN3>Kóka</TRANS_ADMIN3>
<ADMIN2>Pest</ADMIN2>
<TRANS_ADMIN2>Pest</TRANS_ADMIN2>
<COUNTRY_NAME>Magyarország</COUNTRY_NAME>
<TRANS_COUNTRY>Magyarország</TRANS_COUNTRY>
<COUNTRY>HUN</COUNTRY>
<POSTAL_CODE>2243</POSTAL_CODE>
<PHONE_NUMBER Preferred="TRUE">29-428110</PHONE_NUMBER>
<AREA_CODE>29</AREA_CODE>
<LOCAL_NUMBER>428110</LOCAL_NUMBER>
<CHAIN_ID>1776</CHAIN_ID>
<CHAIN_NAME>coop</CHAIN_NAME>
<PERCENT_FROM_REF_NODE>90</PERCENT_FROM_REF_NODE>
<IPD_FLAG>0</IPD_FLAG>
<LINK_ID>322566747</LINK_ID>
<LINK_PVID>598117304</LINK_PVID>
<LINK_FUNCTIONAL_CLASS>4</LINK_FUNCTIONAL_CLASS>
<LINK_DETAILED_CITY>N</LINK_DETAILED_CITY>
<LINK_IN_PROCESS>N</LINK_IN_PROCESS>
<LINK_IN_POI_ACCESS>N</LINK_IN_POI_ACCESS>
<CONTROLLED_ACCESS>N</CONTROLLED_ACCESS>
<SIDE>R</SIDE>
<HOUSE_NUMBER_FORMAT> </HOUSE_NUMBER_FORMAT>
<STREET_LANGUAGE>HUN</STREET_LANGUAGE>
<NATIONAL_IMPORTANCE>N</NATIONAL_IMPORTANCE>
<PRIVATE_ACCESS>N</PRIVATE_ACCESS>
<DATE_POI_ADDED>23-OCT-08</DATE_POI_ADDED>
<PROGRAM_THAT_ADDED_A_POI>SYNC_PRIME</PROGRAM_THAT_ADDED_A_POI>
<LAST_UPDATED_DATE_OF_POI>29-MAR-10</LAST_UPDATED_DATE_OF_POI>
<PROGRAM_THAT_LAST_UPDATED_THE_POI>NBS_IMPORT_UPDATE</PROGRAM_THAT_LAST_UPDATED_THE_POI>
<LONGITUDE>19.57616</LONGITUDE>
<LATITUDE>47.48316</LATITUDE>
<DATA_SOURCE_ID>28091109</DATA_SOURCE_ID>
<CATALOG>09</CATALOG>
<LONG_HAUL_OF_POI>N</LONG_HAUL_OF_POI>
<CALCULATED_LEVEL>0</CALCULATED_LEVEL>
<PLACE_SCORE>0</PLACE_SCORE>
<LOCATION_SCORE>0</LOCATION_SCORE>
<NAICS_ID>-1</NAICS_ID>
<CATEGORY_SYSTEM>NT</CATEGORY_SYSTEM>
</RECORD>
<RECORD>
<POI_ID>946</POI_ID>
<SUPPLIER_ID>2</SUPPLIER_ID>
<POI_PVID>997928552</POI_PVID>
<DB_ID>1367398055</DB_ID>
<REGION>H1</REGION>
<POI_NAME NAME_TYPE="Official" LANG_CODE="HUN">Csépa posta</POI_NAME>
<TRANS_POI_NAME NAME_TYPE="Trans Official" LANG_CODE="ENG">Csépa posta</TRANS_POI_NAME>
<CATEGORY>9530</CATEGORY>
<CATEGORY_NAME>Post Office</CATEGORY_NAME>
<STREET_BASE_NAME>4511</STREET_BASE_NAME>
<TRANS_STREET_BASE_NAME>4511</TRANS_STREET_BASE_NAME>
<ADMIN4>Csépa</ADMIN4>
<TRANS_ADMIN4>Csépa</TRANS_ADMIN4>
<ADMIN3>Csépa</ADMIN3>
<TRANS_ADMIN3>Csépa</TRANS_ADMIN3>
<ADMIN2>Jász-Nagykun-Szolnok</ADMIN2>
<TRANS_ADMIN2>Jász-Nagykun-Szolnok</TRANS_ADMIN2>
<COUNTRY_NAME>Magyarország</COUNTRY_NAME>
<TRANS_COUNTRY>Magyarország</TRANS_COUNTRY>
<COUNTRY>HUN</COUNTRY>
<POSTAL_CODE>5475</POSTAL_CODE>
<PHONE_NUMBER Preferred="TRUE">56-323000</PHONE_NUMBER>
<AREA_CODE>56</AREA_CODE>
<LOCAL_NUMBER>323000</LOCAL_NUMBER>
<PERCENT_FROM_REF_NODE>10</PERCENT_FROM_REF_NODE>
<IPD_FLAG>0</IPD_FLAG>
<LINK_ID>646822303</LINK_ID>
<LINK_PVID>708379688</LINK_PVID>
<LINK_FUNCTIONAL_CLASS>4</LINK_FUNCTIONAL_CLASS>
<LINK_DETAILED_CITY>N</LINK_DETAILED_CITY>
<LINK_IN_PROCESS>N</LINK_IN_PROCESS>
<LINK_IN_POI_ACCESS>N</LINK_IN_POI_ACCESS>
<CONTROLLED_ACCESS>N</CONTROLLED_ACCESS>
<SIDE>L</SIDE>
<HOUSE_NUMBER_FORMAT> </HOUSE_NUMBER_FORMAT>
<STREET_LANGUAGE>HUN</STREET_LANGUAGE>
<NATIONAL_IMPORTANCE>N</NATIONAL_IMPORTANCE>
<PRIVATE_ACCESS>N</PRIVATE_ACCESS>
<DATE_POI_ADDED>23-OCT-08</DATE_POI_ADDED>
<PROGRAM_THAT_ADDED_A_POI>SYNC_PRIME</PROGRAM_THAT_ADDED_A_POI>
<LAST_UPDATED_DATE_OF_POI>18-MAY-09</LAST_UPDATED_DATE_OF_POI>
<PROGRAM_THAT_LAST_UPDATED_THE_POI>NBS_IMPORT_UPDATE</PROGRAM_THAT_LAST_UPDATED_THE_POI>
<LONGITUDE>20.1264</LONGITUDE>
<LATITUDE>46.80777</LATITUDE>
<DATA_SOURCE_ID>28091109</DATA_SOURCE_ID>
<CATALOG>09</CATALOG>
<LONG_HAUL_OF_POI>N</LONG_HAUL_OF_POI>
<CALCULATED_LEVEL>0</CALCULATED_LEVEL>
<PLACE_SCORE>0</PLACE_SCORE>
<LOCATION_SCORE>0</LOCATION_SCORE>
<NAICS_ID>-1</NAICS_ID>
<CATEGORY_SYSTEM>NT</CATEGORY_SYSTEM>
</RECORD>
</RECORDS>

I have tried the following but am not successful:

Code:
xmllint --xpath '/RECORDS/RECORD/COUNTRY[text()="COUNTRY"]/following-sibling::string[position()=1]/text()


I want the output to be tab delimited, how to do this.

I have also tried the following(itkamaraj's solution) but my output file has more than desired output

Code:
awk -F"[<>]" 'BEGIN{print "ISO POSTAL_CODE STREET_BASE_NAME"} /COUNTRY/{a=$3} /POSTAL_CODE/{b=$3} /STREET_BASE_NAME/{c=$3}{print a,b,c}' text.xml >res.dat

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Parsing custom data into xml in Shell

Hi , I have data as below in a text file { 'AAA' => { 'A1' => 'a1 comment', 'A2' => 'a2 comment' }, 'BBB' => { 'B1' => 'b1 comment' }, 'CCC' => { 'C1' => 'c1 comment', 'C2' => 'c2 comment', 'C3' => 'c3 comment' 'C4' => 'c4... (2 Replies)
Discussion started by: vivek d r
2 Replies

2. Shell Programming and Scripting

XML-Text Parsing Using shell scripting

HI Guys, I have to parse below xml file :- <xn:SubNetwork id="ONRM_ROOT_MO_R"> <xn:MeContext id="LP101"> <xn:ManagedElement id="1"> <xn:VsDataContainer id="1"> <xn:attributes> ... (8 Replies)
Discussion started by: asavaliya
8 Replies

3. Solaris

XML to Text file Parsing Using shell scripting

Hi, I want to parse an XML File using Shell Script preferably by using awk command, I/P file is : <gn:ExternalGsmCell id="016P3A"> <gn:attributes> <gn:mnc>410</gn:mnc> <gn:mcc>310</gn:mcc> <gn:lac>8016</gn:lac> ... (2 Replies)
Discussion started by: tech_frk
2 Replies

4. Shell Programming and Scripting

XML to Text file Parsing Using shell scripting

Hi folks, Need some help with XML to text file parsing , the following is the content of the XML File. <xn:SubNetwork id="SNJNPRZDCR0R03"> <xn:MeContext id="PRSJU0005"> <xn:VsDataContainer id="PRSJU0005"> <xn:attributes> ... (6 Replies)
Discussion started by: tech_frk
6 Replies

5. Shell Programming and Scripting

XML parsing using shell script

I have a xml file like this <bul:collectionStrategy name="strategy1"> <bul:collectionTemplateGroup name="15min group"/> <bul:collectionTemplateGroup name="hourly group"/> </bul:collectionStrategy> <bul:CollectionTemplateGroup name="hourly group" > ... (2 Replies)
Discussion started by: LavanyaP
2 Replies

6. Shell Programming and Scripting

Shell script for XML code parsing.

I need to create a shell script that can parse the below XML and send a string back adding all XML values. The text which's not in angular braces are to be printed. Sample code: <RequestBillsRsp... (9 Replies)
Discussion started by: xtatic
9 Replies

7. Shell Programming and Scripting

Shell script for XML code parsing.

Please help me to create a shell script that can parse the below XML and send a string back adding all XML values.:) <RequestBillsRsp... (1 Reply)
Discussion started by: xtatic
1 Replies

8. Shell Programming and Scripting

XML parsing in a shell script.

Below is a XML I have... <?xml version="1.0" encoding="UTF-8" ?> <component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:XXXXX-www-Install-Manifest manifest.xsd" xmlns="urn:qqqqq-Install-Manifest" name="OM" ... (1 Reply)
Discussion started by: dashok.83
1 Replies

9. Shell Programming and Scripting

Parsing XML using Shell Script

Hello, I'm a starting shell scripter and no Perl knowledge. I've trying to do this for a while: I want to parse an XML file and get certain data out of it and write that data into a CSV file, all this using Shell Scripting (in Bash). Or Perl without any XML Parser/Interpreter (if possible). ... (1 Reply)
Discussion started by: Kage Musha
1 Replies

10. Shell Programming and Scripting

XML parsing through shell scritps

Hi, Am new to scripting. :) Am trying to figure out whether can i use bash scripting to parse an xml file. Parsing is not just pulling out information according to the pattern but its more of a generic parsing. I should identify the xml hierarchy and pull out information accordingly. It's not a... (2 Replies)
Discussion started by: karthikvela
2 Replies
Login or Register to Ask a Question