XML parsing by UNIX


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users XML parsing by UNIX
# 1  
Old 03-20-2013
XML parsing by UNIX

Hi,
I am new in shell scripting. i want to extract tag values in xml files by using shell script. my files like this:
Code:
<cw: properties>
<cw:std_properties>
<tns: properties>
<tns:name>AdminOutQueue</tns:name> 
<tns:type>String</tns:type> 
<tns:subtype>QueueName</tns:subtype> 
<tns:value xml:space="preserve">WBIA.SMRPSC1.ADOUTQ</tns:value> 
<tns:description>The logical queue that will be used by the connector to write admin messages to the broker</tns:description> 
<tns:updateMethod>component restart</tns:updateMethod> 
<tns:location>
<tns:reposController>false</tns:reposController> 
<tns:reposAgent>true</tns:reposAgent> 
<tns:localConfig>true</tns:localConfig> 
</tns:location>
<tns:isEncrypted>false</tns:isEncrypted> 
</tns: properties>
<tns: properties>
<tns:name>AgentTraceLevel</tns:name> 
<tns:type>Integer</tns:type> 
<tns:subtype /> 
<tns:value xml:space="preserve">5</tns:value> 
<tns:description>Trace level for the connector agent</tns:description> 
<tns:updateMethod>component restart</tns:updateMethod> 
<tns:location>
<tns:reposController>false</tns:reposController> 
<tns:reposAgent>true</tns:reposAgent> 
<tns:localConfig>true</tns:localConfig> 
</tns:location>
<tns:isEncrypted>false</tns:isEncrypted> 
</tns: properties>
 
</cw: properties>
</cw:std_properties>

i want to extract AdminOutQueue or AgentTraceLevel property value like tns:value for both.
how can i do that?please help.
Thanks in advance

regards,
Arindam

Last edited by Corona688; 03-20-2013 at 07:05 PM..
# 2  
Old 03-20-2013
Quote:
Originally Posted by arindam guha
Hi,
I am new in shell scripting. i want to extract tag values in xml files by using shell script. my files like this:
<cw: properties>
<cw:std_properties>
<tns: properties>
<tns:name>AdminOutQueue</tns:name>
<tns:type>String</tns:type>
<tns:subtype>QueueName</tns:subtype>
<tns:value xml:space="preserve">WBIA.SMRPSC1.ADOUTQ</tns:value>
<tns:description>The logical queue that will be used by the connector to write admin messages to the broker</tns:description>
<tns:updateMethod>component restart</tns:updateMethod>
<tns:location>
<tns:reposController>false</tns:reposController>
<tns:reposAgent>true</tns:reposAgent>
<tns:localConfig>true</tns:localConfig>
</tns:location>
<tns:isEncrypted>false</tns:isEncrypted>
</tns: properties>
<tns: properties>
<tns:name>AgentTraceLevel</tns:name>
<tns:type>Integer</tns:type>
<tns:subtype />
<tns:value xml:space="preserve">5</tns:value>
<tns:description>Trace level for the connector agent</tns:description>
<tns:updateMethod>component restart</tns:updateMethod>
<tns:location>
<tns:reposController>false</tns:reposController>
<tns:reposAgent>true</tns:reposAgent>
<tns:localConfig>true</tns:localConfig>
</tns:location>
<tns:isEncrypted>false</tns:isEncrypted>
</tns: properties>

</cw: properties>
</cw:std_properties>


i want to extract AdminOutQueue or AgentTraceLevel property value like tns:value for both.
how can i do that?please help.
Thanks in advance

regards,
Arindam
Grep will get the whole line.
Code:
line=$(grep *AdminOutQueue* file_name)

In Bash ${string#substring} removes substring from the front of string and
${string%substring} from the end
Code:
name="${"${"$line"#"<tns:name>AdminOutQueue</tns:"}"%">"}"

Mike

PS: in the future, start a new thread for a new subject.
PPS. Nesting expansions rarely works, the example above may not work, you may need an intermediate variable.


Moderator's Comments:
Mod Comment This post moved from other thread to here


edit: nesting substitutions like I did above does not work, you need to trim the beginning and end seperately.

Last edited by Michael Stora; 04-07-2013 at 01:53 AM..
# 3  
Old 03-20-2013
It sounds like you want to just ignore lines that do not have those tags. If the data conveniently has line feeds after every close or all element tag and not after any interesting open element tags, just egrep for those tags. It's not xml, just text filtering. You can use sed, awk or perl to adjust the lines if they do not ffit that mold and the line feeds are not real data. PERL, C++ and JAVA can parse xml, and probably that other p named script language I keep blocking on. XPATH XQUERY sorts of queries rely on real xml parsing.
This User Gave Thanks to DGPickett For This Post:
# 4  
Old 03-21-2013
Code:
$ awk -F'[<>]' ' /tns:name/ || /tns:value/ { print $3 } ' file
AdminOutQueue
WBIA.SMRPSC1.ADOUTQ
AgentTraceLevel
5

This User Gave Thanks to anbu23 For This Post:
# 5  
Old 03-21-2013
thanks for ur reply.
PFA the xml file.
actually i want to extract value this way.
Example:
if i give AdminInQueue in my command it will give back its <tns:value> only. here it will give WBIA.SMRPSC1.ADINQ.
means i want to extract the particular <tns:value> by giving its name only.
and i will store it one variable.

can u please suggest something?
thanks in advance.
# 6  
Old 03-22-2013
One approach is to make tuple lines, where the name and value are in that order on the line with a delimiter between: space, comma, tab, colon, pipe long vertical mark. Then another command can filter the lines that you want, allowing you to use wild cards in your key.
This User Gave Thanks to DGPickett For This Post:
# 7  
Old 03-23-2013
Thanks. Can u pls post the required command for this.
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

Unix XML Parsing check well formed

Hi, I am using ksh, is there any command which can check whether the XML file is well formed or not? Regards, Sreejit (1 Reply)
Discussion started by: sreejitnair123
1 Replies

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

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