XML reading and parsing! Please help


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers XML reading and parsing! Please help
# 1  
Old 12-23-2015
Tools XML reading and parsing! Please help

See test.xml file attached
# 2  
Old 12-23-2015
Tools XML reading and parsing! Please help

Good Day All

Im quiet new to ksh scripting and need a bit of your help. I am attempting to write a script that reads in an XML and extracts certain field values from an XML file. The values are all alphanumeric and consist of two components: e.g "Test 1".

I need to to create a script that will increment the number value in those fields as I and update the original value in the xml file. I have read up about GREP and SED commands but do not know how to properly execute them.

Below I have added the "Test.xml" I need to use.

Code:
<?xml version="1.0" standalone="yes"?>
<GROUP ID="062001" Name="CIF: Create Customer">
<TX>
<FIELD Format="9(17)" ID="accntNumber1" />
<FIELD Format="XX" ID="cust_type1" value="01"/>
<FIELD Format="9(5)" ID="DefInteger1" />
<FIELD Format="99" ID="title1" value="01"/>
<FIELD Format="X(20)" ID="firstname1" value="Test 11"/>
<FIELD Format="X(20)" ID="firstname2" />
<FIELD Format="X(35)" ID="surname1" value="Test 11"/>
<FIELD Format="X(5)" ID="surname2" />
<FIELD Format="X(60)" ID="name" />
<FIELD Format="X(40)" ID="addr1" Offset="20" value="1 Main Street"/>
<FIELD Format="X(40)" ID="addr2" value="Somerset West"/>
<FIELD Format="X(40)" ID="addr3" value="Cape Town"/>
<FIELD Format="X(40)" ID="addr4" value="8000"/>
<FIELD Format="X(8)" ID="DefaultString8" />
<FIELD Format="XX" ID="countrycode1" value="ZA"/>
<FIELD Format="X(12)" ID="DefaultString9" />
<FIELD Format="X(12)" ID="DefaultString10" />
<FIELD Format="X(12)" ID="DefaultString11" />
<FIELD Format="X(12)" ID="DefaultString12" />
<FIELD Format="XX" ID="nationality1" />
<FIELD Format="X" ID="occupanc1" />
<FIELD Format="99" ID="languagecode1" value="01"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810087"/>
<FIELD Format="ddMMyyyy" ID="date1" value="12102012" />
<FIELD Format="X(30)" ID="DefaultString14" />
<FIELD Format="99" ID="id_type1" value="05"/>
<FIELD Format="XX" ID="dom_risk1" value="ZZ"/>
<FIELD Format="XX" ID="BorderRisk1" value="ZZ"/>
<FIELD Format="9" ID="DefInteger5" />
<FIELD Format="999" ID="DefInteger4" />
<FIELD Format="X(4)" ID="segm_code1" />
<FIELD Format="X" ID="VIP_code2" />
<FIELD Format="9" ID="DefInteger12" />
<FIELD Format="9(5)" ID="DefInteger2" />
<FIELD Format="X" ID="yesno1" />
<FIELD Format="X" ID="yesno2" />
<FIELD Format="X" ID="yesno3" />
<FIELD Format="X" ID="yesno4" />
<FIELD Format="X" ID="yesno5" />
<FIELD Format="X(4)" ID="indcode1" />
<FIELD Format="XX" ID="countrycode2" />
<FIELD Format="X(5)" ID="groupCode" />
<FIELD Format="X(5)" ID="busSectorCode" />
<FIELD Format="99" ID="ReasonCode" />
<FIELD Format="99" ID="NameStatus" />
<FIELD Format="X(50)" ID="EmailAdd" value="test11@gmail.com" />
<FIELD Format="X(20)" ID="MiddleName2" />
<FIELD Format="X(20)" ID="MiddleName3" />
<FIELD Format="X(40)" ID="ContactName1" />
<FIELD Format="9(12)" ID="CnctPhone101" />
<FIELD Format="9(12)" ID="CnctPhone102" />
<FIELD Format="X(40)" ID="ContactName2" />
<FIELD Format="9(12)" ID="CnctPhone201" />
<FIELD Format="9(12)" ID="CnctPhone202" />

<FIELD Format="X" ID="cellVerified" />
<FIELD Format="X" ID="cellServices" />
<FIELD Format="X" ID="cellNoChanged" />
<FIELD Format="99" ID="contrLang" />
<FIELD Format="X(40)" ID="newSurname" />
<FIELD Format="9(8)" ID="idExpDate" />
<FIELD Format="X(2)" ID="whySaPP" />
<FIELD Format="X" ID="openReason" value=" "/>
<FIELD Format="X(2)" ID="CONT1_TITLE" />
<FIELD Format="X(2)" ID="CONT2_TITLE" />
<FIELD Format="X" ID="CONT1_REL" />
<FIELD Format="X" ID="CONT2_REL" />
<FIELD Format="X(12)" ID="CONT1_WORK_PH" />
<FIELD Format="X(12)" ID="CONT2_WORK_PH" /> 
<FIELD Format="X(50)" ID="CONT1_EMAIL_ID" />
<FIELD Format="X(50)" ID="CONT2_EMAIL_ID" />
<FIELD Format="9(8)" ID="DATE_OF_BIRTH" />
<FIELD Format="X" ID="GENDER" />
<FIELD Format="99" ID="DHA_STATUS" />

</TX>
<RX>
<FIELD Format="9(3)" ID="soc" />
<FIELD Format="9(18)" ID="custNo" Offset="1"/>
</RX>
</GROUP>

The fields that need to be updated are:

Code:
<FIELD Format="X(20)" ID="firstname1" value="Test 11"/>
<FIELD Format="X(35)" ID="surname1" value="Test 11"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810087"/>

The idea is to increment:

Code:
<FIELD Format="X(20)" ID="firstname1" value="Test 11"/>

to
Code:
<FIELD Format="X(20)" ID="firstname1" value="Test 12"/>

Code:
<FIELD Format="X(35)" ID="surname1" value="Test 11"/>

to
Code:
<FIELD Format="X(35)" ID="surname1" value="Test 12"/>

Code:
<FIELD Format="X(14)" ID="IDnumber" value="0210235810087"/>

to
Code:
<FIELD Format="X(14)" ID="IDnumber" value="0210235810087 + 1"/>

SmilieSmilieSmilieSmilieSmilieSmilie
until the counter reaches 100

Please help if you can. Would really appreciate any help.

Last edited by Don Cragun; 12-23-2015 at 03:07 PM.. Reason: Change B tags to CODE tags; clean up and remove many COLOR tags.
# 3  
Old 12-23-2015
awk OK? Try
Code:
awk '
/ID="(first|sur)name1"/ {sub (/[^"]*"\/>/, "Test 12\"/>")
                        }
/ID="IDnumber"/         {match ($0, /[^"]*"\/>/)
                         NR = substr ($0, RSTART, RLENGTH-3)
                         for (i=0; i<=100; i++)         {sub (/[^"]*"\/>/, NR + i "\"/>")
                                                         print
                                                        }
                         next
                        }
1
' CONVFMT="%013.0f" file
<FIELD Format="99" ID="title1" value="01"/>
<FIELD Format="X(20)" ID="firstname1" value="Test 12"/>
<FIELD Format="X(20)" ID="firstname2" />
<FIELD Format="X(35)" ID="surname1" value="Test 12"/>
<FIELD Format="X(5)" ID="surname2" />
.
.
.
<FIELD Format="X(14)" ID="IDnumber" value="0210235810087"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810088"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810089"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810090"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810091"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810092"/>
<FIELD Format="X(14)" ID="IDnumber" value="0210235810093"/>
.
.
.

---------- Post updated at 12:34 ---------- Previous update was at 12:29 ----------

And, DON'T double post!
# 4  
Old 01-04-2016
Unsure

Hi Rudi

Im still unsure about all of this. I tried to run this and have not got the desired result. Where do the values get updated to the Test.xml file in this script? and also I only need one incremented value for the ID number. Dont need them all to be printed.

Im still new to all of this so please correct me if I am wrong.

What does this statement do:

Code:
CONVFMT="%013.0f" Test.xml

?????

Please let me know. It would be much appreciated.

Last edited by Don Cragun; 01-05-2016 at 06:09 PM.. Reason: Add CODE tags, again.
# 5  
Old 01-04-2016
Please use code tags as required by forum rules!

What be "the desired result"? I don't have a clue, a sample is missing.
If you want the (any) result stored in a file, use redirection for the output.

What does
Quote:
one incremented value for the ID number
mean in this context:
Quote:
<FIELD Format="X(14)" ID="IDnumber" value="0210235810087 + 1"/>
until the counter reaches 100
?

Lastly,
Quote:
CONVFMT="%013.0f" Test.xml
defines the CONVFMT variable (needed for printing the counted up variable, c.f. man awk) and the input file name.
# 6  
Old 01-05-2016
Hi Rudi

Thanks for the help. How would I redirect the desired result to an another xml file? As stated in my post, only firstName1, surname and IDNumber fields need be changed. The XML file needs to remain in the same structure when being written back to file but the fields mentioned needs to be updated.

The idea is to have this job update the fields so that I do not manually need to go and update it before execution of its online service. In order for each record to be unique, it is essential that the IDNumber is incremented, else the record will not process.

I have attached the input to this post. Note that values for fields that need to change have namely firstName1 and surname1 have "Test 12" descriptions which should change to Test 13, 14, 15, etc until the counter reaches 100 and same applies to the IDNumber where it gets incremented by one.

I hope this gives you a better understanding. Highly appreciate you helping me.

Regards,
# 7  
Old 01-05-2016
Not clear. Do you want 100 new .xml files of above structure, firstname1, surname1, and IDnumber being incremented by one in each file? What about the Emailaddr? What should the output file names be?
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

XML parsing

I have an xml file where the format looks like below <SESSIONCOMPONENT REFOBJECTNAME ="pre_session_command" REUSABLE ="NO" TYPE ="Pre-session command"> <TASK DESCRIPTION ="" NAME ="pre_session_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1"> ... (8 Replies)
Discussion started by: r_t_1601
8 Replies

2. Shell Programming and Scripting

XML Parsing :

HI I want to parse below file in to two output :- Input :- ?xml version="1.0" encoding="UTF-8"?> <bulkCmConfigDataFile xmlns:un="utranNrm.xsd" <configData dnPrefix="Undefined"> <xn:SubNetwork id="ONRM_ROOT_MO_R"> <xn:MeContext id="C136"> ... (3 Replies)
Discussion started by: asavaliya
3 Replies

3. Shell Programming and Scripting

XML parsing

i have xml output in below format... <AlertsResponse> <Alert id="11216" name="fgdfg"> <AlertActionLog timestamp="1356521629778" user="admin" detail="Recovery Alert"/> </Alert> <Alert id="11215" name="gdfg <AlertActionLog timestamp="1356430119840" user=""... (12 Replies)
Discussion started by: vivek d r
12 Replies

4. Shell Programming and Scripting

XML: parsing of the Google contacts XML file

I am trying to parse the XML Google contact file using tools like xmllint and I even dived into the XSL Style Sheets using xsltproc but I get nowhere. I can not supply any sample file as it contains private data but you can download your own contacts using this script: #!/bin/sh # imports... (9 Replies)
Discussion started by: ripat
9 Replies

5. Shell Programming and Scripting

Parsing XML

I am trying to parse an xml file and trying to grab certain values and inserting them into database table. I have the following xml that I am parsing: <dd:service name="locator" link="false"> <dd:activation mode="manual" /> <dd:run mode="direct_persistent" proxified="false" managed="true"... (7 Replies)
Discussion started by: $criptKid617
7 Replies

6. Shell Programming and Scripting

Parsing XML

Learned People, Hello ! Till today, for the most part, all of the tricky questions/situations that I encountered were already posted by other folks and all I had to do was peruse through these one at a time and I could find some sort of an answer and all I had to do was add some minor tweaks... (5 Replies)
Discussion started by: ManoharMa
5 Replies

7. Shell Programming and Scripting

XML parsing

I have a xml file attached. I need to parse parameterId and its value My output should be like 151515 38 151522 32769 and so on.. Please help me. Its urgent (6 Replies)
Discussion started by: LavanyaP
6 Replies

8. Shell Programming and Scripting

XML Parsing

Hi, Need a script to parse the following xml file content <tag1 Name="val1"> <abc Name="key"/> <abc Name="pass">*********</abc> </tag1> <tag2 Name="Core"> <Host Name="a.b.c"> <tag1 Name="abc"> <abc Name="ac">None</abc> ... (4 Replies)
Discussion started by: Mavericc
4 Replies

9. Shell Programming and Scripting

parsing xml

I want to use wget comment to parse an xml parse that exist in an online website. How can I connect it using shell script through Unix and how can I parse it?? (1 Reply)
Discussion started by: walnut
1 Replies

10. Programming

XML parsing

Hi I want to take an XML file and transform it into a pipe-delimited format. What is the best tool to use for this? I have libxml2 which seems to be the best xml parser around. The xml file will have the following format. <Txn> <Date>120504</Date> <id>99</id> <Items> <Item>... (1 Reply)
Discussion started by: handak9
1 Replies
Login or Register to Ask a Question