I don't what the rules are for your "XML" file, But this script should give you the desired output(tab delimited output files) for the file data you supplied:
Code:
# Script: process_xml.pl
use strict;
use warnings;
my $in_file_1 = '/temp/input_xml.xml'; ## xml file
my $out_file_1 = '/temp/outputfile_1.txt';
my $out_file_2 = '/temp/outputfile_2.txt';
my $xml_line;
my $mecontext_id;
my @vsdatacontainer_id;
my $vsdatacontainer_id_2;
my $vsdatacontainer_count = 0;
my @connectedmodemobilityprio;
my @csfallbackprio;
my @csfallbackprioec;
my @voiceprio;
my $index;
open ( my $in_file_fh_1, '<', $in_file_1 ) or die "Can't Open $in_file_1 $!\n";
open ( my $out_file_1_fh, '>', $out_file_1 ) or die "Can't open $out_file_1 $!\n";
open ( my $out_file_2_fh, '>', $out_file_2 ) or die "Can't open $out_file_2 $!\n";
# Write header line to 2nd output file
print $out_file_2_fh "EN\tES\tFR\tconnectedModeMobilityPrio\tcsFallbackPrio\tcsFallbackPrioEC\tvoicePrio" . "\n";
LINE: while ( ! eof( $in_file_fh_1 ) ) {
$xml_line = <$in_file_fh_1>;
chomp $xml_line;
next LINE if $xml_line !~ /(xn:MeContext.id=\".*\"|
xn:VsDataContainer.id=\".*\"|
es:connectedModeMobilityPrio\>.*\<\/es:connectedModeMobilityPrio\>|
es:csFallbackPrio>.*\<\/es:csFallbackPrio\>|
es:csFallbackPrioEC\>.*\<\/es:csFallbackPrioEC\>|
es:voicePrio\>.*\<\/es:voicePrio\>
)/x;
# Extract wanted XML values
if ( $xml_line =~ /(xn:MeContext id)/ ) {
$xml_line =~ s!.*\"(.*)\".*!$1!;
$mecontext_id = $xml_line;
}
if ( $xml_line =~ /(xn:VsDataContainer id)/ ) {
$vsdatacontainer_count++;
if ( $vsdatacontainer_count == 1 ) {
next LINE;
}
if ( $vsdatacontainer_count == 2 ) {
$xml_line =~ s!.*\"(.*)\".*!$1!;
$vsdatacontainer_id_2 = $xml_line;
} else {
$xml_line =~ s!.*\"(.*)\".*!$1!;
push @vsdatacontainer_id, $xml_line;
}
}
if ( $xml_line =~ /(\<es:connectedModeMobilityPrio)/ ) {
$xml_line =~ s!.*\<es:connectedModeMobilityPrio\>(.*)\<\/es:connectedModeMobilityPrio\>!$1!;
push @connectedmodemobilityprio, $xml_line;
}
if ( $xml_line =~ /(\<es:csFallbackPrio\>)/ ) {
$xml_line =~ s!.*\<es:csFallbackPrio>(.*)\<\/es:csFallbackPrio\>!$1!;
push @csfallbackprio, $xml_line;
}
if ( $xml_line =~ /(\<es:csFallbackPrioEC\>)/ ) {
$xml_line =~ s!.*\<es:csFallbackPrioEC\>(.*)\<\/es:csFallbackPrioEC\>!$1!;
push @csfallbackprioec, $xml_line;
}
if ( $xml_line =~ /(\<es:voicePrio)/ ) {
$xml_line =~ s!.*\<es:voicePrio\>(.*)\<\/es:voicePrio\>!$1!;
push @voiceprio, $xml_line;
}
}
# Write detail to output files
for $index ( 0 .. $#vsdatacontainer_id ) {
print $out_file_1_fh "$mecontext_id\t$vsdatacontainer_id_2\t$vsdatacontainer_id[$index]\tcsFallbackPrio\t$csfallbackprio[$index]" . "\n";
print $out_file_2_fh "$mecontext_id\t" .
"$vsdatacontainer_id_2\t" .
"$vsdatacontainer_id[$index]\t" .
"$connectedmodemobilityprio[$index]\t" .
"$csfallbackprio[$index]\t" .
"$csfallbackprioec[$index]\t" .
"$voiceprio[$index]" . "\n";
}
close $in_file_fh_1;
close $out_file_1_fh;
close $out_file_2_fh;
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)
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)
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)
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)
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)
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)
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)
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)
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)