How can I parse xml file?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How can I parse xml file?
# 1  
Old 09-13-2008
How can I parse xml file?

How can I parse file containing xml ?
I am sure that its best to use perl - but my perl is not very good - can someone help?

Example below contents of file containing the xml - I basically want to parse the file and have each field contained in a variable..

ie. I want to store the account number in a variable, name in a variable, add in a variable

So I could just echo $accountnumb $name $add etc and get the following
65004 Bob Daly Ireland



XML Sample File

<?xml version="1.0"?>




<po:Message
xmlnsSmilieo="http://192.168.50.167/cust/api"
xmlns="http://192.168.50.167/cust"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://192.168.50.167/cust/api http://database1.com:1008/cust/api/jsp/xsd/api_v3_xsd.jsp"
>
<po:Response>

<po:Header>
<po:RequestUrl><![CDATA[/cust/api/ACCOUNTDetail]]></po:RequestUrl>
<po:RequestCommand>ACCOUNT_DETAILS</po:RequestCommand>
<po:Version>6</po:Version>
<po:Id>000001</po:Id>
<po:Opid><![CDATA[XXX]]></po:Opid>
<po:Status>
<po:Response>SUCCESS</po:Response>
<po:Text>
<![CDATA[Service successfully completed.]]>
</po:Text>
<po:StatusKey><![CDATA[SERVICE_SUCCESS]]></po:StatusKey>
<po:StatusParams cACCOUNT="0">
</po:StatusParams>
</po:Status>
</po:Header>

<po:Body>
<po:RequestKey>
<po:RequestCust>65004</po:RequestCust>
</po:RequestKey>

<ACCOUNT>
<ACCOUNT>65004</ACCOUNT>
<MasterACCOUNT>65004</MasterACCOUNT>
<SubscriberType>SUBS_TYPE_STANDALONE</SubscriberType>
<Name>Bob Daly</Name>
<Add>Ireland</Add>

<ClassDescs>
<ClassDesc><![CDATA[Social Account]]></ClassDesc>
<TempClassDesc><![CDATA[]]></TempClassDesc>
</ClassDescs>
<ClassChangedDateTime></ClassChangedDateTime>

<PreferredLanguage><![CDATA[EN]]></PreferredLanguage>
<PreferredCurrency><![CDATA[EUR]]></PreferredCurrency>
<CurrentPromotionPlan><![CDATA[]]></CurrentPromotionPlan>
<SubscriptionStatus>ACTIVE</SubscriptionStatus>

<TempStatus>NOT_BLOCKED</TempStatus>
<EocnSelStructId>255</EocnSelStructId>

<Agent><![CDATA[00000000]]></Agent>
<SubAgent><![CDATA[]]></SubAgent>
<DisconnectReason><![CDATA[]]></DisconnectReason>

<DisconReasonText><![CDATA[]]></DisconReasonText>

<BeginDate>16-Jul-2008</BeginDate>

<StartDate>16-Jul-2008</StartDate>

<ServiceRemovalDate>12-Sep-2009</ServiceRemovalDate>

<LastModification>12-Sep-2008 13:24:33</LastModification>




</ACCOUNT>
</po:Body>

</po:Response>
</po:Message>

Last edited by frustrated1; 09-13-2008 at 03:52 PM..
# 2  
Old 09-13-2008
An example to read those variables in a shell script with awk, adjust it if you want more fields:

Code:
#/bin/sh

awk -F"<|>" '
$2=="ACCOUNT" && NF > 3{s=S3}
$2=="Name"{s=s" "S3}
$2=="Add"{s=s" "$3}
$2=="/ACCOUNT"{print s}
' file | 
while read accountnumb name add; do
  echo "$accountnumb" "$name" "$add"
done
# do something with "$accountnumb" "$name" "$add"
# more commands..

Regards

Last edited by Franklin52; 09-13-2008 at 05:41 PM.. Reason: adjust code
# 3  
Old 09-13-2008
Thanks for reply - I entered the xml in to a file called file..
Then ran the script you provided but it just returned to command prompt with no output.... Do you know why?
# 4  
Old 09-13-2008
Use nawk, gawk or /usr/xpg4/bin/awk on Solaris.
Do you get any output with this?

Code:
#/bin/sh

awk -F"<|>" '
$2=="ACCOUNT" && NF > 3{s=S3}
$2=="Name"{s=s" "S3}
$2=="Add"{s=s" "$3}
$2=="/ACCOUNT"{print s}
' file

# 5  
Old 09-13-2008
Okay - I now specified to use
/usr/xpg4/bin/awk


I get the following output only when I run the latest script..


Ireland
# 6  
Old 09-13-2008
hmmm - I made a small change to the script and now I get

Bob Daly Ireland

I changed from :
$2=="ACCOUNT" && NF > 3{s=S3}
$2=="Name"{s=s" "S3}
$2=="Add"{s=s" "$3}

to:
$2=="ACCOUNT" && NF > 3{s=S3}
$2=="Name"{s=s" "$3}
$2=="Add"{s=s" "$3}


I dont know much about awk to know why this worked and what to do to get the ACCOUNT to work as well... Can you explain what each row of code in the script is actually doing?
# 7  
Old 09-13-2008
Sorry for the typos, S3 should be $3.
Try this, I've change the internal field separator to split the fields properly if you have spaces in the variables:

Code:
#/bin/sh

OFS=$IFS
IFS=:

/usr/xpg4/bin/awk -F"<|>" '
$2=="ACCOUNT" && NF > 3{s=$3}
$2=="Name"{s=s":"$3}
$2=="Add"{s=s":"$3}
$2=="/ACCOUNT"{print s}
' file |
while read accountnumb name add; do
  echo "$accountnumb" "$name" "$add"
done

IFS=$OFS

# Here you can use the variables $accountnumb" "$name" and "$add"
.
.
exit 0

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Parse xml file

I am trying to create a shell script that will parse an xml file (file attached). awk '/Id v=/ { print }' Test.xml | sed 's!<Id v=\"\(.*\)\"/>!\1!' > output.txt An output.txt file is created but it is empty. It should contain the value 222159 in it. Thanks. (7 Replies)
Discussion started by: cmccabe
7 Replies

2. Shell Programming and Scripting

Parse XML File.

HI Guys I have Below XML File : <xn:SubNetwork id="XYZ"> <xn:SubNetwork id="C01"> <xn:MeContext id="CO1"> <xn:ManagedElement id="1"> <un:RncFunction id="1"> <un:UtranCell id="NY431"> ... (2 Replies)
Discussion started by: pareshkp
2 Replies

3. UNIX for Dummies Questions & Answers

Parse xml file

HI Guys, Input .XML <xn:MeContext id="L0307"> <xn:ManagedElement id="1"> <xn:VsDataContainer id="1"> <xn:attributes> <xn:vsDataType>vsDataENodeBFunction</xn:vsDataType> ... (3 Replies)
Discussion started by: pareshkp
3 Replies

4. Programming

Parse XML file

How do I get the field info for tags ID, NAME, DESCRIPTION. Below is my current code put I can't get beyond the first_child of the file. use strict; use warnings; use XML::Simplehttp://images.intellitxt.com/ast/adTypes/icon1.png; use... (1 Reply)
Discussion started by: leemalloy
1 Replies

5. Shell Programming and Scripting

parse xml file

Hello all, Given the following extract from a xml file with multiple <JOB> .... </JOB> entries <JOB APPLICATION="APP" APR="0" AUG="0" AUTHOR="AUT" AUTOARCH="0" CMDLINE="/tmp/test1 %%var" CONFIRM="1" CREATION_DATE="20100430" CREATION_TIME="130739" ... (2 Replies)
Discussion started by: cabrao
2 Replies

6. Emergency UNIX and Linux Support

How to parse the following xml file

Hi, I have the following file Example.xml <?xml version="1.0" encoding="iso-8859-1"?> <html><set label="09/07/29" value="1241.90"/> </html> Can any one help me in parsing this xml file I want to retrive the attribute values of the tag set Example I want to... (3 Replies)
Discussion started by: Raji_gadam
3 Replies

7. Shell Programming and Scripting

Parse an XML task list to create each task.xml file

I have an task definition listing xml file that contains a list of tasks such as <TASKLIST <TASK definition="Completion date" id="Taskname1" Some other <CODE name="Code12" <Parameter pname="Dog" input="5.6" units="feet" etc /Parameter> <Parameter... (3 Replies)
Discussion started by: MissI
3 Replies

8. Shell Programming and Scripting

Parse String in XML file

Hello All, I am new to this and I need to parse an XML file. Here's the XML Input File: <Report version="1.2"> <summary fatals="0" testcases="1" expected_fails="0" unexpected_passes="0" warnings="9" tests="21" errors="0" fails="1" passes="20" /> <testresult... (4 Replies)
Discussion started by: racbern
4 Replies

9. Shell Programming and Scripting

Parse XML file

Hi, I need to parse the following XML data enclosed in <a> </a> XML tag using shell script. <X> ..... </X> <a> <b> <c>data1</c> <c>data2</c> </b> <d> <c>data3</c> </d> </a> <XX> ... </XX> (5 Replies)
Discussion started by: viki
5 Replies

10. Shell Programming and Scripting

How to parse a XML file using PERL and XML::DOm

I need to know the way. I have got parsing down some nodes. But I was unable to get the child node perfectly. If you have code please send it. It will be very useful for me. (0 Replies)
Discussion started by: girigopal
0 Replies
Login or Register to Ask a Question

Featured Tech Videos