Parsing xml - tricky one...need help!!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing xml - tricky one...need help!!
# 1  
Old 03-11-2014
Parsing xml - tricky one...need help!!

Hi,
i am new to linux programming fraternity but looks like starting with a big thing...
yes..xml parsing (it is indeed tough for a beginner like me) so need your kind help...

The snippet of xml looks like:

Code:
<snapshot>
<tag1>
<key>1234</key>
<keytype>abcd</keytype>
</tag1>

<tag2>
<key>unique</key>
<keytype>efgh</keytype>
<description>Source</description>
</tag2>

<tag3>
<key>5678</key>
<keytype>ijkl</keytype>
<description>new account</description>
</tag3>
</snapshot>

Now I need to write a shell script (KSH) to search for the string "unique". It should be like if key matches the value unique then do {...}.
Can you please help parsing this value although tag is same i.e. key?

Thanks in advance...

Last edited by Don Cragun; 03-12-2014 at 12:28 AM.. Reason: Add CODE tags.
# 2  
Old 03-11-2014
Hello,

Please use code tags while posting commands and codes as per forum rules. If we only want to search the word then following may help.

Code:
awk '/unique/ {print $0}'  file_name

Output will be as follows.

Code:
<key>unique</key>


Thanks,
R. Singh
# 3  
Old 03-11-2014
Thanks for your prompt response.
But unfortunately this doesn't work...

It is printing the complete xml.
I only need to print "unique" in a variable.
# 4  
Old 03-11-2014
Hello,

Following may help you in same.

Code:
awk '/unique/ {print}' file_name | sed 's/\(.*\>\)\(.*\)\(\<.*\)/\2/g'


Thanks,
R. Singh
# 5  
Old 03-12-2014
I truly appreciate your help Ravinder. But this also doesnt work.
I have attached the test file for your reference too..


I am looking for "ValueToBePrinted" data to be fetched and printed in a variable.

I am looking for the output as:
ValueToBePrinted

Last edited by rookie2014; 03-12-2014 at 12:19 AM..
# 6  
Old 03-12-2014
Hello,

Please try to use the following in your script/code.

Code:
$ a=`sed 's/\(.*\)\(ValueToBePrinted\)\(.*\)/\2/g;s/^\<.*//g' check_xml_file_check12113  | grep -v '^$'`

$ echo $a
ValueToBePrinted

Note: Where check_xml_file_check12113 is the input file name.

Thanks,
R. Singh
# 7  
Old 03-12-2014
Hi rookie_2014,
The awk script RavinderSingh13 provided in message #2 in this thread did exactly what you asked for in message #1 in this thread.

The awk and sed script RavinderSingh13 provided in message #4 in this thread did exactly what you asked for in message #3 in this thread.

The sed and grep script RavinderSingh13 provdied in message #6 in this thread did exactly what you asked for in message #5 in this thread. (Although the ksh script:
Code:
variable='ValueToBePrinted'
printf '%s\n' "$variable"

would have done the same thing and would be much simpler.)

The fact that the testfile.xml file that you provided in message #5 in this thread is COMPLETELY different from the sample file your that provided in message #1 in this thread and the fact that you have given no logic as to why data between XML <LoanIdentifier> and </LoanIdentifier> tags containing the string ValueToBePrinted should be selected and printed instead of the values 121315 and 12345 (which also appear between the same tags in testfile.xml) tells us that you either don't understand your assignment or haven't looked at you sample input enough to be able to describe what you're trying to do.

Is this a homework assignment?

What are you really trying to do?
  1. Are you trying to print data found in LoanIdentifier tags in your XML file?
  2. Are you trying to verify that there is data for a LoanIdentifier tag in your XML file that has the vaue ValueToBePrinted?
  3. Are you trying to verify that data for any tag in your XML file has the value ValueToBePrinted?

It is really hard for us to help you if you won't clearly explain what you are trying to do. And, it is even harder if the sample input you show us is not representative of the actual input you will be processing!
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. 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

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

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

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