XML parsing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting XML parsing
# 1  
Old 10-23-2017
XML parsing

I have an xml file where the format looks like below

Code:
<SESSIONCOMPONENT REFOBJECTNAME ="pre_session_command" REUSABLE ="NO" TYPE ="Pre-session command">
                <TASK DESCRIPTION ="" NAME ="pre_session_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="NO"/>
                </TASK>
     </SESSIONCOMPONENT>

            <SESSIONCOMPONENT REFOBJECTNAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Post-session success command">
                <TASK DESCRIPTION ="" NAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Fail task if any command fails" VALUE ="NO"/>
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="NO"/>
                </TASK>

The ask is to replace the VALUE tag with the following strings that i will generate on the fly

Code:
STR1="/scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Paramprefilename"
STR2="scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Parampostfilename"

The Output will be like

Code:
<SESSIONCOMPONENT REFOBJECTNAME ="pre_session_command" REUSABLE ="NO" TYPE ="Pre-session command">
                <TASK DESCRIPTION ="" NAME ="pre_session_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="/scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Paramprefilename"/>
                </TASK>
     </SESSIONCOMPONENT>

            <SESSIONCOMPONENT REFOBJECTNAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Post-session success command">
                <TASK DESCRIPTION ="" NAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Fail task if any command fails" VALUE ="NO"/>
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Parampostfilename"/>
                </TASK>


Im trying to use awk but unable to find the correct use of gsub in this .. any help wil be appreciated
HTML Code:
 awk -F "[><]" '/VALUEPAIR EXECORDER/{gsub(/VALUE*/,VALUE ="/ac ")}1'  wf_DB2zOS_DB2PAAA_TCHK_ACCT_MASTER.xml

Last edited by r_t_1601; 10-24-2017 at 02:36 AM.. Reason: Updated the VALUE from NULL to NO
# 2  
Old 10-23-2017
In your awk gsub attempt, the quoting of the replacement needs to be corrected:
Code:
awk -F "[><]" '/VALUEPAIR EXECORDER/{gsub(/VALUE*/,"VALUE =\"/ac \"")}1'  file


Last edited by RudiC; 10-23-2017 at 06:39 AM..
# 3  
Old 10-23-2017
Thanks Rudi however im unable to using variable replacement inside gsub

Code:
 awk -F "[><]" '/VALUEPAIR EXECORDER/{gsub(/VALUE =\"*\"/,VALUE = $STR1)}1'  wf_DB2zOS_DB2PAAA_TCHK_ACCT_MASTER.xml

thanks
# 4  
Old 10-23-2017
Quote:
Originally Posted by r_t_1601
Thanks Rudi however im unable to using variable replacement inside gsub
Code:
 awk -F "[><]" '/VALUEPAIR EXECORDER/{gsub(/VALUE =\"*\"/,VALUE = $STR1)}1'  wf_DB2zOS_DB2PAAA_TCHK_ACCT_MASTER.xml

thanks
Hello r_t_1601,

Not sure how you want to substitute the string VALUE with multiple strings as it is present in many places, following is the example of using one variable and doing substitution with VALUE string.
Code:
awk -v STR1='/scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Paramprefilename'  -v STR2="scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Parampostfilename" '/VALUEPAIR EXECORDER/{sub("VALUE =","&"STR1)} 1'   Input_file

Above is only an example how to use variables in awk, in case you have more requirements then kindly mention them clearly.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Old 10-23-2017
Try
Code:
awk -v RPST="$STR1|$STR2" 'BEGIN {n = split (RPST, RP, "|")} /VALUEPAIR EXECORDER/ {T=$NF; sub (/""/, "\"" RP[++CNT] "\"", T); sub ($NF, T)} 1'   file

but make sure the strings STR1 & 2 have been assigned using single (NOT double) quotes so the $ sign are being preserved.
This User Gave Thanks to RudiC For This Post:
# 6  
Old 10-24-2017
Hi Ravinder thanks for the response.

Code:
STR1="/scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Paramprefilename"
STR2="scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Parampostfilename"

The STR1 should be substituted where the SESSIONCOMPONENT REFOBJECTNAME ="pre_session_command
Code:
<SESSIONCOMPONENT REFOBJECTNAME ="pre_session_command" REUSABLE ="NO" TYPE ="Pre-session command">
                <TASK DESCRIPTION ="" NAME ="pre_session_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="STR1"/>
                </TASK>
     </SESSIONCOMPONENT>

and STR2 should substitute where SESSIONCOMPONENT REFOBJECTNAME ="post_session_success_command"
Code:
<SESSIONCOMPONENT REFOBJECTNAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Post-session success command">
                <TASK DESCRIPTION ="" NAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Fail task if any command fails" VALUE ="NO"/>
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="STR2"/>
                </TASK>
     </SESSIONCOMPONENT>

just stating the initial value would be "NO" instead of "null" in VALUE

Last edited by r_t_1601; 10-24-2017 at 02:37 AM..
# 7  
Old 10-24-2017
Hello r_t_1601,

Could you please try following and let me know if this helps you.
Code:
awk -v STR1='/scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Paramprefilename'  -v SRT2='scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Parampostfilename'  '
/pre_session_command/{
  val=1
}
val==1 && /VALUEPAIR EXECORDER/{
  sub(/VALUE =[^/]*/,"VALUE =")
  sub("VALUE =","&\"" STR1 "\"");
  val=""
}
/post_session_success_command/{
  val=2
}
val==2 && /VALUEPAIR EXECORDER/{
  sub(/VALUE =[^/]*/,"VALUE =")
  sub("VALUE =","&\"" SRT2 "\"");
  val=""
}
1
'  Input_file

Output will be as follows.
Code:
<SESSIONCOMPONENT REFOBJECTNAME ="pre_session_command" REUSABLE ="NO" TYPE ="Pre-session command">
                <TASK DESCRIPTION ="" NAME ="pre_session_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="/scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Paramprefilename"/>
                </TASK>
     </SESSIONCOMPONENT>
             <SESSIONCOMPONENT REFOBJECTNAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Post-session success command">
                <TASK DESCRIPTION ="" NAME ="post_session_success_command" REUSABLE ="NO" TYPE ="Command" VERSIONNUMBER ="1">
                    <ATTRIBUTE NAME ="Fail task if any command fails" VALUE ="NO"/>
                    <ATTRIBUTE NAME ="Recovery Strategy" VALUE ="Fail task and continue workflow"/>
                    <VALUEPAIR EXECORDER ="1" NAME ="Command1" REVERSEASSIGNMENT ="NO" VALUE ="scripts/waitForDummyFilePDS.sh -f$Paramdummyfile -H$ParamIP -e$Paramemail -j$Parampostfilename"/>
                </TASK>

Let me know if you have any queries on same.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
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 :

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

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

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

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

5. UNIX for Advanced & Expert Users

XML Parsing

I had a big XML and from which I have to make a layout as below *TOTAL+CB | *CB+FX | CS |*IR | *TOTAL | -------------------------------------------------------------------------------------------------- |CB FX | | | | DMFXNY EMSGFX... (6 Replies)
Discussion started by: manas_ranjan
6 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