Update particular tag in a XML file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Update particular tag in a XML file
# 1  
Old 06-23-2016
Update particular tag in a XML file

Below is the content in my XML file

Code:
<name>XXX</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>
<name>YYY</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>
<name>ZZZ</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>

I want to replace "Delay" as "Down" under name "XXX" only.

Is it possible to update using awk function. Please let me know the command.

Thanks,
Viswa


Moderator's Comments:
Mod Comment Please use code tags as required by forum rules!

Last edited by RudiC; 06-23-2016 at 07:26 AM.. Reason: Added code tags.
# 2  
Old 06-23-2016
Any attempts/ideas/thoughts from your side?
# 3  
Old 06-23-2016
Code:
sed -i "s/Delay/Down/g" filename

Above replaces all "Delay" to "Down"

I want to apply this under "<name>XXX</name>"

Thanks,
Viswa


Moderator's Comments:
Mod Comment Please use code tags as required by forum rules!

Last edited by RudiC; 06-23-2016 at 04:41 PM.. Reason: Added code tags.
# 4  
Old 06-23-2016
Parsing XML is not trivial. If I have to do it in shell, I usually use my yanx.awk script

Code:
$ cat upd.awk

BEGIN { ORS="" }
TAG=="NAME" {
        name=$2;
        gsub(/(^[ \r\n\t]+)|([\r\n\t ]+$)/, "", name);
}

(name=="XXX") && (TAG=="EVENTTYPE") && /Delay/ { $2="Down"; }

{        printf("<%s",$0);}

$ awk -f yanx.awk -f upd.awk input.xml

<name>XXX</name>
         <eventType>Uptime</eventType>
         <eventType>Down</eventType>
         <eventType>Down</eventType>
<name>YYY</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>
<name>ZZZ</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>

$

# 5  
Old 06-23-2016
While Corona668's xml-parser is a powerful tool, it may seem oversized for this small problem. Try
Code:
awk 'match ($0, /^<name>[^<]*/) {XF = substr ($0, RSTART+6, RLENGTH-6) == "XXX"} XF {sub (/Delay/, "Down")} 1 ' file4
<name>XXX</name>
         <eventType>Uptime</eventType>
         <eventType>Down</eventType>
         <eventType>Down</eventType>
<name>YYY</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>
<name>ZZZ</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>

# 6  
Old 06-23-2016
Code:
perl -pe 'BEGIN{$/="<name>"} if(/XXX<\/name/){s/Delay/Down/g}' file.xml


Output:

Code:
<name>XXX</name>
         <eventType>Uptime</eventType>
         <eventType>Down</eventType>
         <eventType>Down</eventType>
<name>YYY</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>
<name>ZZZ</name>
         <eventType>Uptime</eventType>
         <eventType>Delay</eventType>
         <eventType>Delay</eventType>

# 7  
Old 06-24-2016
All the above commands works fine but it just print as "down" in the screen, I want to update the value in file "file.xml"

Thanks,
Viswa

---------- Post updated at 12:58 AM ---------- Previous update was at 12:37 AM ----------

Code:
perl -pe 'BEGIN{$/="<name>"} if(/XXX<\/name/){s/Delay/Down/g}' file.xml >> file.xml

If I use the above command it appends the updated value to file.xml, I want to overwrite the content.

Thanks,
Viswa




Moderator's Comments:
Mod Comment Please use code tags as required by forum rules!

Last edited by RudiC; 06-24-2016 at 03:37 AM.. Reason: Added code tags (again).
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Grepping multiple XML tag results from XML file.

I want to write a one line script that outputs the result of multiple xml tags from a XML file. For example I have a XML file which has below XML tags in the file: <EMAIL>***</EMAIL> <CUSTOMER_ID>****</CUSTOMER_ID> <BRANDID>***</BRANDID> Now I want to grep the values of all these specified... (1 Reply)
Discussion started by: shubh752
1 Replies

2. Shell Programming and Scripting

Moving XML tag/contents after specific XML tag within same file

Hi Forum. I have an XML file with the following requirement to move the <AdditionalAccountHolders> tag and its content right after the <accountHolderName> tag within the same file but I'm not sure how to accomplish this through a Unix script. Any feedback will be greatly appreciated. ... (19 Replies)
Discussion started by: pchang
19 Replies

3. Shell Programming and Scripting

Extracting the tag name from an xml file

Hi, My requirement is something like this, I have a xml file that contains some tags and nested tags, <n:tag_name1> <n:sub_tag1>val1</n:sub_tag1> <n:sub_tag2>val2</n:sub_tag2> </n:tag_name1> <n:tag_name2> <n:sub_tag1>value</n:sub_tag1> ... (6 Replies)
Discussion started by: Little
6 Replies

4. Shell Programming and Scripting

To search for a particular tag in xml and collate all similar tag values and display them count

I want to basically do the below thing. Suppose there is a tag called object1. I want to display an output for all similar tag values under heading of Object 1 and the count of the xmls. Please help File: <xml><object1>house</object1><object2>child</object2>... (9 Replies)
Discussion started by: srkmish
9 Replies

5. Emergency UNIX and Linux Support

Trying to parse a xml file for only one tag

I have a xml file in where I need to parse only a particular tag and print the output in the shell script. Here is the tag info in the xml file <dp:file> This is dp file output </dp:file> Output should be printed as This is dp file output. Please help.Thank you. (5 Replies)
Discussion started by: chandu123
5 Replies

6. Shell Programming and Scripting

How to add the multiple lines of xml tags before a particular xml tag in a file

Hi All, I'm stuck with adding multiple lines(irrespective of line number) to a file before a particular xml tag. Please help me. <A>testing_Location</A> <value>LA</value> <zone>US</zone> <B>Region</B> <value>Russia</value> <zone>Washington</zone> <C>Country</C>... (0 Replies)
Discussion started by: mjavalkar
0 Replies

7. Shell Programming and Scripting

How to retrieve the value from XML tag whose end tag is in next line

Hi All, Find the following code: <Universal>D38x82j1JJ </Universal> I want to retrieve the value of <Universal> tag as below: Please help me. (3 Replies)
Discussion started by: mjavalkar
3 Replies

8. Shell Programming and Scripting

Changing particular tag value of xml file

Hi All, I have number of xml file like : ______________________________________________________ <?xml version="1.0" standalone="no"?> <!-- Created by Symology Ltd on 13/02/2012 - USER_BATCH_ID 0011091684 --> <!-- RECIPIENT_URL: HTTP://194.168.0.81:3408 --> <EToNrequest ... (7 Replies)
Discussion started by: krsnadasa
7 Replies

9. Shell Programming and Scripting

XML tag replacement from different XML file

We have 2 XML file 1. ORIGINAL.xml file and 2. ATTRIBUTE.xml files, In the ORIGINAL.xml we need some modification as <resourceCode>431048</resourceCode>under <item type="Manufactured"> tag - we need to grab the 431048 value from tag and pass it to database table in unix shell script to find the... (0 Replies)
Discussion started by: balrajg
0 Replies

10. Shell Programming and Scripting

How To get the data from a tag in XML File

Hi I have a XML file in which data is loaded from a relational table and the column names are tags in the xml file which is shown below. ... (8 Replies)
Discussion started by: naughty21
8 Replies
Login or Register to Ask a Question