11-01-2001
Parsing XML dynamic data via awk?
I am trying to use a line of output in an XML file as input in another new XML file for processing purposes via a shell script. Since I am a newbie though, I'm not sure how to do this since the data is different everytime. I am using this technique with static data right now:
echo -n "Running data test... "
cat datafile.xml | sed -e s/changethis/intothis/ > /tmp/$$.xml
export RESULT=`~/xml /tmp/$$.xml | grep "<Code>SUCCESS</Code>"`
if [ "$RESULT" != "" ]; then { echo passed } else { echo FAILED ; exit } fi
The XML file has the data I need stored between XML tags, so I know I could grep that line and output it to another file, and use that file to refer to for the input in the next test. That file would have < Number >here'sthedata< /Number > in that file. The trick would be to parse the data out, in effect removing the tags, storing that value in a variable, and then using sed to do a replace in the new input file like I am above. I'm just unsure how to go about parsing the data out.
Hope this wasn't confusing
![Big Grin Smilie](https://www.unix.com/images/smilies/biggrin.gif)
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hi All,
I have a xml file for example as described below
<xml>
<address>
<street><street>
<address/>
<isbn>426728783932020308393930303</isbn>
<book>
<name>
</name>
</book>
.
.
.
</xml>
My problem is to get the isbn number from the above described file using ksh script. Could... (6 Replies)
Discussion started by: vinna
6 Replies
2. Shell Programming and Scripting
hello ,
i am trying to parse xml using awk however its a little bit tricky as i want
<databases>
<source>
<host>prod</host>
<port>1522</port>
<tns>GP1</tns>
<user>P11</user>... (6 Replies)
Discussion started by: amit1_x
6 Replies
3. Shell Programming and Scripting
Hi
Is it possible to parse a posted xml data from a remote server in unix shell script. if so how to do that? and i need to give this script path in the push url (in remote server) . how to do this?
I have tried this in asp but could not succeed....so am trying in shell scripting...the thread... (1 Reply)
Discussion started by: aemunathan
1 Replies
4. Shell Programming and Scripting
Hi people,
I am writing a korn shell script, and one of the command gives an output something like below:
release.label.2010.03.02
objects:
/project/path/to/some/file_name.ksh
/project/path/another/file_name01.dat
I have to retrieve the file paths one by one & use them as... (9 Replies)
Discussion started by: kiwin1000
9 Replies
5. Shell Programming and Scripting
Created a korn shell script, everything is is working except this section, the variable $SYSINFO is being set, but the NASIP & NASDEV are failing, it appears to be treating the config.xml file config directory and xml as the file. Need a second set of eyes to tell me where I am messing up.
#... (3 Replies)
Discussion started by: juanb25
3 Replies
6. Shell Programming and Scripting
hi all..
need your help again..
i have xml file and i want to parsing some data from the xml file..
<ex-name="keroco">
<................>
<................>
<................>
<br-name="cincai">
<ship="123456">
<...................>
... (3 Replies)
Discussion started by: buncit8
3 Replies
7. Shell Programming and Scripting
Hi,
I have an XML file in Linux and it contains a long string of characters. The last part of the file is like
.......
.......
.......
CAD</MarketDescription></InvestorTransaction></AdvisorAccount></DivisionAdvisor></Division>... (3 Replies)
Discussion started by: naveed
3 Replies
8. Shell Programming and Scripting
Hi All,
I have a problem to resolve. For following XML file, I need to parse the values based on Tag Name. I would prefer to use this by awk. I have used sed command to replace the tags (s/<SeqNo>//).
In this case there can be new tags introduced. So need to parse it based on Tag Name. Any... (9 Replies)
Discussion started by: Tons
9 Replies
9. Shell Programming and Scripting
Hi folks
I have a script I wrote that basically parses a bunch of config and xml files works out were to add in the new content then spits out the data into a new file.
It all works - apart from the xml and config file format in the new file
with XML files the original XML (that ends up in... (2 Replies)
Discussion started by: dfinch
2 Replies
10. Shell Programming and Scripting
Hi ,
I have data as below in a text file
{
'AAA' => {
'A1' => 'a1 comment',
'A2' => 'a2 comment'
},
'BBB' => {
'B1' => 'b1 comment'
},
'CCC' => {
'C1' => 'c1 comment',
'C2' => 'c2 comment',
'C3' => 'c3 comment'
'C4' => 'c4... (2 Replies)
Discussion started by: vivek d r
2 Replies
LEARN ABOUT DEBIAN
xml::smart::tutorial
XML::Smart::Tutorial(3pm) User Contributed Perl Documentation XML::Smart::Tutorial(3pm)
NAME
XML::Smart::Tutorial - Tutorial and examples for XML::Smart.
SYNOPSIS
This document is a tutorial for XML::Smart and shows some examples of usual things.
Working with contents:
In XML::Smart the key CONTENT is reserved and shouldn't be used directly, since XML::Smart will deal with the convertion of arguments to
node contents, including multiple node contents autimatically.
What happens when you set a value:
$xml->{root}{foo} = 'simple value' ;
Here foo will be a normal argument/attribute value, and will generate this XML data:
<root foo="simple value"/>
But if you insert some tag or lines in the values by default XML::Smart will convert it to a node content:
$xml->{root}{foo} = "line0
lien1
line2
" ;
And will generate that XML data:
<root>
<foo>line0
lien1
line2
</foo>
</root>
But what you can do if you want to force some type, let's say, have a node content with a simple value:
$xml->{root}{foo} = 'simple value' ;
$xml->{root}{foo}->set_node(1) ;
And will generate that XML data:
<root>
<foo>simple value</foo>
</root>
Multiple contents:
When you have interpolated content/data you need to work in a different. Let's say that you load this XML data:
<root>
content0
<tag1 arg="1"/>
content1
</root>
If you access directly the root key as string you will get all the content parts grouped. So, this code:
my $xml = new XML::Smart(q`
<root>
content0
<tag1 arg="1"/>
content1
</root>
`,'smart') ;
print "#$xml->{root}#" ;
Will print that:
#
content0
content1
#
To access each part of the content independently you should use an array that receive the method content():
my @content = $xml->{root}->content ;
print "#$content[0]#
" ;
And this will print that:
#
content0
#
Now to set the multiple content values you should use the method content() with 2 arguments:
$xml->{root}->content(0,'new content') ;
And now the XML data produced will be:
<root>new content<tag1 arg="1"/>
content1
</root>
If you use the method content() with only one argument it will remove all the multiple contents and will set the new value in the place of
the 1st content.
Setting the XML Parser.
By defaul XML::Smart will use XML::Parser or XML::Smart::Parser (in this order of preference) to load a XML data.
To force or define by your self the parser you can use the 2nd argument option when creating a XML::Smart object:
my $xml = new XML::Smart( 'some.xml' , 'XML::Parser' ) ;
## and
my $xml = new XML::Smart( 'some.xml' , 'XML::Smart::Parser' ) ;
XML::Smart also has an extra parser, XML::Smart::HTMLParser, that can be used to load HTML as XML, or to load wild XML data:
my $xml = new XML::Smart( 'some.xml' , 'XML::Smart::HTMLParser' ) ;
Aliases for the parser options:
SMART|REGEXP => XML::Smart::Parser
HTML => XML::Smart::HTMLParser
So, you can use as:
my $xml = new XML::Smart( 'some.xml' , 'smart' ) ;
my $xml = new XML::Smart( 'some.xml' , 'html' ) ;
Customizing the Parser.
You can customize the way that the parser will treat the XML data:
Forcing nodes/tags and arguments/attributes to lowercase or upercase:
## For lower case:
my $xml = new XML::Smart( 'some.xml' ,
lowtag => 1 ,
lowarg => 1 ,
) ;
## For uper case:
my $xml = new XML::Smart( 'some.xml' ,
upertag => 1 ,
uperarg => 1 ,
) ;
Loading arguments without values (flags) as a TRUE boolean:
** Note, this option will work only when the XML is parsed by XML::Smart::HTMLParser, since only it accept arguments without values!
my $xml = new XML::Smart(
'<root><foo arg1="" flag></root>' ,
'XML::Smart::HTMLParser' ,
arg_single => 1 ,
) ;
Here's the tree of the example above:
'root' => {
'foo' => {
'flag' => 1,
'arg1' => ''
},
},
Customizing the parse events:
XML::Smart can redirect the parsing process to personalized functions:
my $xml = XML::Smart->new( 'some.xml' ,
on_start => &on_start ,
on_char => &on_char ,
on_end => &on_end ,
) ;
sub on_start {
my ( $tag , $pointer , $pointer_back ) = @_ ;
$pointer->{$tag}{type_user} = 1 if $tag =~ /(?:name|age)/ ;
}
sub on_char {
my ( $tag , $pointer , $pointer_back , $content) = @_ ;
$$content =~ s/s+/ /gs ;
}
sub on_end {
my ( $tag , $pointer , $pointer_back ) = @_ ;
$pointer->{$tag}{type_extra} = 1 if $tag =~ /(?:more|tel|address)/ ;
}
AUTHOR
Graciliano M. P. <gm@virtuasites.com.br>
I will appreciate any type of feedback (include your opinions and/or suggestions). ;-P
Enjoy and thanks for who are enjoying this tool and have sent e-mails! ;-P
ePod
This document was written in ePod (easy-POD), than converted to POD, and from here you know the way.
perl v5.10.1 2004-12-08 XML::Smart::Tutorial(3pm)