Hello,
I have complex XML file (around 1000 of records) and need to retrieve few elements based on the condition...
1.want to read node only where ciType="application"
2.read the value of entry where key="Last Status Change" o/p:10/2/2017 10:16 PM
<nodes>
<node name="ABC" id="1" ciType="null">
<children>
<node name="Business Systems" classification="null" ciType
+="ci_collection">
<dimension name="Unresolved Events" status="-2" id
+="3232">
</dimension>
<dimension name="Availability" status="10" id="123
+13">
</dimension>
<children>
<node name="3YP (421)" classification="null" ciTyp
+e="application" >
<dimension name="Availability" status="20"
+ id="2312">
<body>
<entry key="Status">
<![CDATA[ OK ]]>
</entry>
<entry key="Business Rule">
<![CDATA[ Percentage Rule ]]>
</entry>
<entry key="Last Status Change">
<![CDATA[ 10/2/2017 10:16 PM ]]>
</entry>
</body>
</dimension>
</node>
</children>
</node>
</children>
</node>
</nodes>
sample code
#!/usr/bin/perl
use strict;
use warnings;
use XML::XPath;
use XML::LibXML::NodeList;
use Data::Dumper;
my @records;
my $bamxml = 'OpenApi.xml';
my $bamxp = XML::XPath->new(filename => $bamxml);
my $bamxpath = $bamxp->findnodes('//nodes/node/children/node/chil
+dren/node');
my $pattern = shift;
my $matches = XML::LibXML::NodeList->new;
foreach my $bamnode ($bamxpath->get_nodelist) {
my $name = $bamxp->find('./@name',$bamnode)->string_value;
my $citype = $bamxp->find('./@ciType',$bamnode)->string_va
+lue;
my $status = $bamxp->find('./dimension/@status',$bamnode)->str
+ing_value;
my $time = $bamxp->find("./dimension/body/entry",$bamnode)->st
+ring_value;
s/^\s+|\s+$//g for $name,$citype,$status,$time;
push @records, {
name => $name,
citype => $citype,
status => $status,
Time => $time
};
}
Required Output
$VAR1 = [
{
'status' => '20',
'citype' => 'application',
'name' => '3YP (421)',
'Time' => '10/2/2017 10:16 PM'
}
];
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.