Scripting question, replacement in xml file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Scripting question, replacement in xml file
# 8  
Old 11-21-2012
Hi Birei,

Well,
I have long XML file and i want to replace XML twig that start with Text Id=98,12 and many more ..

Is it possible to give the input from external file.

In Perl code you mentioned only one Id=98 ( @id="98" )

q{Text[@Id="98"]/Language}
I want to add more Id and i want to give list of Id from external file from where its read example

cat Text Id_file
98
12
10
55
..
..
..
# 9  
Old 11-21-2012
Try following solution. Now the script accepts two arguments. The first one is a file with a number per line, and the second one is the xml file:
Code:
$ cat infile
98
12
$ cat script.pl
#!/usr/bin/perl

use strict;
use warnings;
use XML::Twig;

my (%id);

die qq|Usage: perl $0 <file-with-ids> <xml-file>\n| unless @ARGV == 2;

{
        open my $fh, '<', shift or die qq|ERROR: $!\n|;
        while ( my $line = <$fh> ) {
                chomp $line;
                $id{ $line } = 1;
        }
}

{
        my $twig = XML::Twig->new(
                twig_handlers => {
                        q{Text[@Id]} => sub {
                                return unless exists $id{ $_->att( 'Id' ) };
                                for my $c ( $_->children( 'Language' ) ) {
                                        $c->subs_text( qr{(?ix)su \s+ saldo \s+ es (?=\s)}, 'Your Balance' );
                                }
                        }
                },
                pretty_print => 'indented',
        )->parsefile( shift )->print;
}

$ perl-5.14.2 script.pl infile xmlfile 
<root>
  <Text Id="98">
    <Language id="1">Your Balance $mainAccountBalance1Tiene ademas $dedicatedAccount1Balance1 mensajes de texto</Language>
    <Language id="2"></Language>
    <Language id="3">Your Balance $mainAccountBalance1Tiene ademas $dedicatedAccount1Balance1 mensajes de texto</Language>
    <Language id="4">Your Balance $mainAccountBalance1Tiene ademas $dedicatedAccount1Balance1 mensajes de texto</Language>
  </Text>
  <Text Id="96">
    <Language id="1">Su saldo es $mainAccountBalance1.</Language>
    <Language id="2">Su saldo es $mainAccountBalance1.</Language>
  </Text>
  <Text Id="12">
    <Language id="1">Your Balance $mainAccountBalance1.</Language>
    <Language id="2">Your balance  $mainAccountBalance1.</Language>
  </Text>
</root>

This User Gave Thanks to birei For This Post:
# 10  
Old 11-23-2012
Hi ,
I tried to run the script but my server don`t have XML twig perl module.
And i am not able to install the XML parser or Twig module.

Is there any other way to achieve same result without using Twig.
# 11  
Old 11-23-2012
Yes. There are many ways but the easiest one is to use a XML parser. I don't know the available tools of your server so it's your decission. But take into account that process XML data with sed or awk usually is a hard work and prone to errors. I don't use them for this kind of task.
# 12  
Old 11-23-2012
can you suggest something using Awk ..i appreciate
# 13  
Old 11-23-2012
Are you kidding me?

I've done three diferent versions of a script to solve your problem althought your specifications were not clear since the first post. I did some effort to help you, and now you tell me that couldn't execute any of them. Why didn't you tell me that couldn't run that program, or that perl is not an option, or at least that you can't use an external module, or that you are looking for an awk solution, or whatever?

Here there is people with amazing awk skills, not me. I'm sure that one of them too will help you.
# 14  
Old 11-23-2012
Never Mind..thanks for your support.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

XML data replacement

I have below lines in a file <SubRecord> <Property Name="Name">QQQQQQQQ</Property> <Property Name="Prompt">YYYYYYYYYY</Property> <Property Name="Default">$ddd</Property> <Property Name="HelpTxt">blahblah</Property> <Property Name="ParamType">4</Property> <Property... (8 Replies)
Discussion started by: ratheeshjulk
8 Replies

2. Shell Programming and Scripting

How to extract data from XML file using shell scripting?

Hi , I have input file as XML. following are input data #complex.xml Code: <?xml version="1.0" encoding="UTF-8"?><TEST_doc xmlns="http://www.w3.org/2001/XMLSchema-instance"> <ENTRY uid="123456"> <protein> <name>PROT001</name> <organism>Human</organism> ... (1 Reply)
Discussion started by: arun_kohan
1 Replies

3. Shell Programming and Scripting

How to extract data from xml file using shell scripting?

Hi evry1, This is my 1st post in this forum.Pls help me I want to extract some data froma xml file which has 2000 lines using shell scripting. Actually my xml file has some "audio and video codes" which i need to arrange in a column wise format after extracting it using shell scripting.I... (4 Replies)
Discussion started by: arun_kohan
4 Replies

4. HP-UX

XML tag name content replacement

Hi, Need to replace an XML tag name contents, please provide any suggestions. Scenario is : <abc_def>Value_some_content</abc_def> Expected output : <abc:def>Value_some_content</abc:def> We have many tag with different names & contents in a file or a string. Please help on the... (3 Replies)
Discussion started by: periyasamycse
3 Replies

5. Shell Programming and Scripting

XML id replacement with shell

Hi.. I have a problem with replacing of id-0f5435080b with some name daily, problem here is whenever I generate xml file it generates unique id for instance say for example today id-0f5435080b and tomorrow it may be id-0f68643508so basically I just want to replace this id with some name say... (5 Replies)
Discussion started by: nex_asp
5 Replies

6. UNIX for Dummies Questions & Answers

Delete a record in a xml file using shell scripting

find pattern, delete line with pattern and 3 lines above and 8 lines below the pattern. The pattern is "isup". The entire record with starting tag <record> and ending tag </record> containing the pattern is to be deleted and the rest to be retained. <record> ... (4 Replies)
Discussion started by: sdesstp
4 Replies

7. Solaris

XML to Text file Parsing Using shell scripting

Hi, I want to parse an XML File using Shell Script preferably by using awk command, I/P file is : <gn:ExternalGsmCell id="016P3A"> <gn:attributes> <gn:mnc>410</gn:mnc> <gn:mcc>310</gn:mcc> <gn:lac>8016</gn:lac> ... (2 Replies)
Discussion started by: tech_frk
2 Replies

8. Shell Programming and Scripting

XML to Text file Parsing Using shell scripting

Hi folks, Need some help with XML to text file parsing , the following is the content of the XML File. <xn:SubNetwork id="SNJNPRZDCR0R03"> <xn:MeContext id="PRSJU0005"> <xn:VsDataContainer id="PRSJU0005"> <xn:attributes> ... (6 Replies)
Discussion started by: tech_frk
6 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

sed xml file multiple line replacement

I have a file called config.xml, it's a simple xml file, and I need use sed/awk to erase some lines. <machine xsi:type="unix-machineType"> <name>server1</name> <node-manager> <name>server1</name> <listen-address>server1</listen-address> </node-manager> ... (3 Replies)
Discussion started by: cbo0485
3 Replies
Login or Register to Ask a Question