Shell script for XML code parsing.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell script for XML code parsing.
# 1  
Old 05-09-2011
Lightbulb 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:

Code:
<RequestBillsRsp version="1.0"><BillSummaryData><AgreementNumberFull>13-WY-8425-2</AgreementNumberFull><AgreementNumberAbbr>WY84252</AgreementNumberAbbr><LineOfBusiness>F</LineOfBusiness><CompanyCode>0005</CompanyCode><UniqDigit/><StateCode/><UnitID>13</UnitID><DueDate>04/12/2012</DueDate><BillAmount>282.00</BillAmount><StateAgentCode>131533</StateAgentCode><AgentName>DAN CUTHBERT</AgentName><AgentPhoneNumber>(847)228-6620</AgentPhoneNumber><PayableFlag>N</PayableFlag><ACHPayableFlag>N</ACHPayableFlag><BillROCode>01</BillROCode><PayableMessage>001</PayableMessage><BillDate>20090824</BillDate><SeqNum>0615882</SeqNum><PlcyDispName>PRIOVOLOS, TASOS &amp; SOFIA</PlcyDispName><MailingZipcode/><RiskDesc>18214 S SPRING MEADOWS DR</RiskDesc><AnyAmountPayableFlag>N</AnyAmountPayableFlag><ACHAnyAmountPayableFlag>N</ACHAnyAmountPayableFlag></BillSummaryData><AddressInfo><AddressOne/><AddressTwo/><City/><State/><Zip/></AddressInfo><PayerName/><messages rc="00"/></RequestBillsRsp>

Sample o/p:

Code:
13-WY-8425-2
DAN CUTHBERT
(847)228-6620
PRIOVOLOS, TASOS &amp; SOFIA
18214 S SPRING MEADOWS DR
N


Last edited by pludi; 05-09-2011 at 05:10 AM..
# 2  
Old 05-09-2011
Try this
Assumption, these data will be found in these columns always
Code:
 awk -F'<|>' '{print $7,$43,$47,$71,$81,$85}' OFS="\n" infile

If you think the xml format is different, you can enhance this code for the remaining fields
Code:
awk -F'<|>' '{ for(i=0;i<NF;i++){ if($i=="AgreementNumberFull"){print $++i} } }' infile

regards,
Ahamed

Last edited by ahamed101; 05-09-2011 at 06:01 AM..
# 3  
Old 05-09-2011
Hey Ahamed,

Thanks for ur time but ur script wud work perfectly fne if the code is provided in a single line but the XML file can have the code even in the paragraph form. So if u can suggest some other alternative.
# 4  
Old 05-09-2011
Yuo gave the input like that and so I coded it that way.

Assuming your xml file is in the format
Code:
<RequestBillsRsp version="1.0">
<BillSummaryData>
<AgreementNumberFull>13-WY-8425-2</AgreementNumberFull>
<AgreementNumberAbbr>WY84252</AgreementNumberAbbr>
<LineOfBusiness>F</LineOfBusiness>
<CompanyCode>0005</CompanyCode>
<UniqDigit/>
<StateCode/>
<UnitID>13</UnitID>
<DueDate>04/12/2012</DueDate>
<BillAmount>282.00</BillAmount>
...

Code:
awk -F'<|>' '$2~/AgreementNumberFull|AgentName|AgentPhoneNumber|PlcyDispName|RiskDesc|^AnyAmountPayableFlag/{print $3}' infile

regards,
Ahamed
# 5  
Old 05-09-2011
if this helps :
Code:
sed "s/<[^>]*>/#/g;s/##*/\n/g" infile.xml

Code:
$ sed "s/<[^>]*>/#/g;s/##*/\n/g" tst.xml

13-WY-8425-2
WY84252
F
0005
13
04/12/2012
282.00
131533
DAN CUTHBERT
(847)228-6620
N
N
01
001
20090824
0615882
PRIOVOLOS, TASOS &amp; SOFIA
18214 S SPRING MEADOWS DR
N
N

$

Before further selections (if you want to pipe it into the awk statement suggested by ahmed in #4), you can also :

Code:
sed "s/></>\n</g" tst.xml

Code:
# sed "s/></>\n</g" tst.xml
<RequestBillsRsp version="1.0">
<BillSummaryData>
<AgreementNumberFull>13-WY-8425-2</AgreementNumberFull>
<AgreementNumberAbbr>WY84252</AgreementNumberAbbr>
<LineOfBusiness>F</LineOfBusiness>
<CompanyCode>0005</CompanyCode>
<UniqDigit/>
<StateCode/>
<UnitID>13</UnitID>
<DueDate>04/12/2012</DueDate>
<BillAmount>282.00</BillAmount>
<StateAgentCode>131533</StateAgentCode>
<AgentName>DAN CUTHBERT</AgentName>
<AgentPhoneNumber>(847)228-6620</AgentPhoneNumber>
<PayableFlag>N</PayableFlag>
<ACHPayableFlag>N</ACHPayableFlag>
<BillROCode>01</BillROCode>
<PayableMessage>001</PayableMessage>
<BillDate>20090824</BillDate>
<SeqNum>0615882</SeqNum>
<PlcyDispName>PRIOVOLOS, TASOS &amp; SOFIA</PlcyDispName>
<MailingZipcode/>
<RiskDesc>18214 S SPRING MEADOWS DR</RiskDesc>
<AnyAmountPayableFlag>N</AnyAmountPayableFlag>
<ACHAnyAmountPayableFlag>N</ACHAnyAmountPayableFlag>
</BillSummaryData>
<AddressInfo>
<AddressOne/>
<AddressTwo/>
<City/>
<State/>
<Zip/>
</AddressInfo>
<PayerName/>
<messages rc="00"/>
</RequestBillsRsp>
#


Last edited by ctsgnb; 05-09-2011 at 03:21 PM..
This User Gave Thanks to ctsgnb For This Post:
# 6  
Old 05-09-2011
Here is an XSL stylesheet which does what you specified in your first post. In addition it does not output output newlines for empty elements.
Code:
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text"/>

<xsl:template match="/">
     <xsl:apply-templates/>
</xsl:template>

<xsl:template match="node()">
   <xsl:if test="string(.)">
      <xsl:copy>
          <xsl:apply-templates select="node()"/><xsl:text>
</xsl:text>
      </xsl:copy>
   </xsl:if>
</xsl:template>

</xsl:stylesheet>

Code:
13-WY-8425-2
WY84252
F
0005
13
04/12/2012
282.00
131533
DAN CUTHBERT
(847)228-6620
N
N
01
001
20090824
0615882
PRIOVOLOS, TASOS & SOFIA
18214 S SPRING MEADOWS DR
N
N

# 7  
Old 05-10-2011
Hey murphy...thanks for the XSL sheet. This XSL stylesheet does the same thing but i need to run these scripts on some servers so they need to be Shell. But cz of ur post i gotta knw few more things about XML and XSL. Thanks fr ur time Smilie

---------- Post updated at 08:46 AM ---------- Previous update was at 08:26 AM ----------

@ctsgnb...ur code really worked but i'm not getting the output in new lines...everything is being displayed horizontally in a single line.

---------- Post updated at 08:51 AM ---------- Previous update was at 08:46 AM ----------

@ ahamed....accept my mistake. Did u try this code that u posted last? I tried it..got no output Smilie

---------- Post updated at 03:17 PM ---------- Previous update was at 08:51 AM ----------

@ctsgnb:

# sed "s/<[^>]*>/#/g;s/##*/\n/g" tst.xml

n13-WY-8425-2nWY84252nFn0005n13n04/12/2012n282.00n131533nDAN CUTHBERTn(847)228-6620nNnNn01n001n20090824n0615882nPRIOVOLOS, TASOS &amp; SOFIAn18214 S SPRING MEADOWS DRnNnNn

look at these "n"....tried hard but cud'nt locate the reason for these and also the o/p's in a single line...m using sun 5.10..
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

Parsing XML using shell script

Well, issue is i have to parse this script to get the VERSION: <?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> ... (9 Replies)
Discussion started by: zorosinister
9 Replies

5. 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

6. 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

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