Greetings,
I am fairly new to Perl and to XML and I’m trying to
(1) parse a XML document (snippet attached), (2)
update specified data using a hash of hashes parsed
from another non-XML document (not shown), and then
(3) write the updated data using the XML format of the
original file in #1.
Using XML::Simple, I’ve parsed the attached file into
deeply nested anonymous hashes. I’m having trouble
trying to figure out how to iteratively traverse this
tree and update specific values using the hash of
hashes, instead of updating individually specified
values (example shown below). How can I create a loop
to do this?
Below is my current script:
####################################################
#!perl
#
use strict;
use warnings;
use XML::Simple;
open (OUTPUT,">out.txt") || die "Sorry, couldn't open
OUTPUT file: $!";
my $config = XMLin('input.xml',forcearray=>1);
$config->{TSCHierarchyClusterData}->[0]->{Root}->[0]->{Child}->[0]->{Child}->[0]->{Child}->[1]->{Child}->[0]->{Child}->[0]->{ClusterNum}="3333";
# This is an example of modifying an individual value.
# But I'm looking for an easier way to say "update
cluster number 365 with 3333" while looping through a
hash of hashes, instead of having to write out the
whole reference each time.
print OUTPUT XMLout($config,xmldecl=>'<?xml
version="1.0"?>');
####################################################
Thanks for any help that you can provide,
David
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free web site building tool. Try it!
http://webhosting.yahoo.com/ps/sb/
<?xml version="1.0" encoding="iso-8859-1"?>
<Expression>
<TSCHierarchyClusterData NumClusters="699">
<Root ClusterNum="698" NumChildren="2" SplitAttribute="g_module" SplitValue="1">
<Child ClusterNum="697" NumChildren="2" SplitAttribute="g_module" SplitValue="2" ParentSplit="false">
<Child ClusterNum="696" NumChildren="2" SplitAttribute="g_module" SplitValue="3" ParentSplit="false">
<Child ClusterNum="695" NumChildren="2" SplitAttribute="g_module" SplitValue="4" ParentSplit="false">
<Child ClusterNum="694" NumChildren="2" SplitAttribute="g_module" SplitValue="5" ParentSplit="false">
<Child ClusterNum="693" NumChildren="2" SplitAttribute="g_module" SplitValue="6" ParentSplit="false">
<Child ClusterNum="692" NumChildren="2" SplitAttribute="g_module" SplitValue="7" ParentSplit="false">
<Child ClusterNum="691" NumChildren="2" SplitAttribute="g_module" SplitValue="8" ParentSplit="false">
<Child ClusterNum="690" NumChildren="2" SplitAttribute="g_module" SplitValue="9" ParentSplit="false">
<Child ClusterNum="689" NumChildren="2" SplitAttribute="g_module" SplitValue="10" ParentSplit="false">
<Child ClusterNum="688" NumChildren="2" SplitAttribute="g_module" SplitValue="11" ParentSplit="false">
<Child ClusterNum="687" NumChildren="2" SplitAttribute="g_module" SplitValue="12" ParentSplit="false">
<Child ClusterNum="686" NumChildren="2" SplitAttribute="g_module" SplitValue="13" ParentSplit="false">
<Child ClusterNum="427" NumChildren="2" SplitAttribute="YPL230W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="426" NumChildren="2" SplitAttribute="YGL096W" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="425" NumChildren="0" SplitAttribute="YDR423C" SplitValue="1" ParentSplit="false">
</Child>
<Child ClusterNum="424" NumChildren="2" SplitAttribute="YGL208W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="423" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="86" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="422" NumChildren="2" SplitAttribute="YDR259C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="85" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="84" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="421" NumChildren="2" SplitAttribute="YGL192W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="420" NumChildren="2" SplitAttribute="YDR099W" SplitValue="1" ParentSplit="false">
<Child ClusterNum="419" NumChildren="0" SplitAttribute="YGL116W" SplitValue="-1" ParentSplit="false">
</Child>
<Child ClusterNum="417" NumChildren="2" SplitAttribute="YOL133W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="80" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="79" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="416" NumChildren="2" SplitAttribute="YPL177C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="78" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="77" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="415" NumChildren="2" SplitAttribute="YPL230W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="414" NumChildren="2" SplitAttribute="YOR178C" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="413" NumChildren="2" SplitAttribute="YPL230W" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="412" NumChildren="2" SplitAttribute="YHL028W" SplitValue="1" ParentSplit="false">
<Child ClusterNum="76" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="75" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="411" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="72" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="410" NumChildren="2" SplitAttribute="YDR259C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="71" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="70" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="409" NumChildren="2" SplitAttribute="YFL021W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="408" NumChildren="2" SplitAttribute="YGL192W" SplitValue="1" ParentSplit="false">
<Child ClusterNum="407" NumChildren="2" SplitAttribute="YGL116W" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="406" NumChildren="2" SplitAttribute="YHR030C" SplitValue="1" ParentSplit="false">
<Child ClusterNum="405" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="66" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="65" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="64" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="63" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="403" NumChildren="2" SplitAttribute="YFR028C" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="402" NumChildren="2" SplitAttribute="YHR082C" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="401" NumChildren="0" SplitAttribute="YHR082C" SplitValue="1" ParentSplit="false">
</Child>
<Child ClusterNum="399" NumChildren="0" SplitAttribute="YDR207C" SplitValue="1" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="398" NumChildren="2" SplitAttribute="YMR043W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="57" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="56" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="397" NumChildren="2" SplitAttribute="YFR009W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="396" NumChildren="2" SplitAttribute="YJL103C" SplitValue="1" ParentSplit="false">
<Child ClusterNum="395" NumChildren="2" SplitAttribute="YIL038C" SplitValue="1" ParentSplit="false">
<Child ClusterNum="394" NumChildren="0" SplitAttribute="YLR433C" SplitValue="1" ParentSplit="false">
</Child>
<Child ClusterNum="393" NumChildren="2" SplitAttribute="YCR084C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="53" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="52" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="51" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="392" NumChildren="0" SplitAttribute="YOR230W" SplitValue="1" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="391" NumChildren="2" SplitAttribute="YCL067C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="390" NumChildren="2" SplitAttribute="YCL067C" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="389" NumChildren="0" SplitAttribute="YDR183W" SplitValue="-1" ParentSplit="false">
</Child>
<Child ClusterNum="387" NumChildren="0" SplitAttribute="YIL154C" SplitValue="-1" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="386" NumChildren="2" SplitAttribute="YDR123C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="43" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="42" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="385" NumChildren="2" SplitAttribute="YPL230W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="384" NumChildren="2" SplitAttribute="YGR123C" SplitValue="1" ParentSplit="false">
<Child ClusterNum="383" NumChildren="2" SplitAttribute="YNL090W" SplitValue="1" ParentSplit="false">
<Child ClusterNum="382" NumChildren="2" SplitAttribute="YMR043W" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="41" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="40" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="39" NumChildren="0" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="381" NumChildren="2" SplitAttribute="YPL203W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="38" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="37" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="380" NumChildren="2" SplitAttribute="YGL192W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="36" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="35" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="379" NumChildren="2" SplitAttribute="YJL164C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="378" NumChildren="2" SplitAttribute="YBR026C" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="377" NumChildren="0" SplitAttribute="YMR043W" SplitValue="-1" ParentSplit="false">
</Child>
<Child ClusterNum="375" NumChildren="0" SplitAttribute="YLR336C" SplitValue="1" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="374" NumChildren="2" SplitAttribute="YKL193C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="29" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="28" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="373" NumChildren="2" SplitAttribute="YFR009W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="372" NumChildren="2" SplitAttribute="YER177W" SplitValue="1" ParentSplit="false">
<Child ClusterNum="371" NumChildren="0" SplitAttribute="YLR273C" SplitValue="1" ParentSplit="false">
</Child>
<Child ClusterNum="369" NumChildren="2" SplitAttribute="YKR099W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="24" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="23" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="368" NumChildren="2" SplitAttribute="YLR228C" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="22" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="21" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="367" NumChildren="2" SplitAttribute="YPL230W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="366" NumChildren="2" SplitAttribute="YLR229C" SplitValue="1" ParentSplit="false">
<Child ClusterNum="365" NumChildren="0" SplitAttribute="YML051W" SplitValue="-1" ParentSplit="false">
</Child>
<Child ClusterNum="363" NumChildren="0" SplitAttribute="YHR084W" SplitValue="1" ParentSplit="true">
</Child>
</Child>
<Child ClusterNum="362" NumChildren="2" SplitAttribute="YBL056W" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="15" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="14" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="361" NumChildren="2" SplitAttribute="YJL164C" SplitValue="1" ParentSplit="true">
<Child ClusterNum="360" NumChildren="2" SplitAttribute="YFR014C" SplitValue="-1" ParentSplit="false">
<Child ClusterNum="359" NumChildren="0" SplitAttribute="YLR451W" SplitValue="-1" ParentSplit="false">
</Child>
<Child ClusterNum="358" NumChildren="2" SplitAttribute="YER184C" SplitValue="-1" ParentSplit="true">
<Child ClusterNum="11" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="10" NumChildren="0" ParentSplit="true">
</Child>
</Child>
</Child>
<Child ClusterNum="357" NumChildren="2" SplitAttribute="YDR096W" SplitValue="1" ParentSplit="true">
<Child ClusterNum="9" NumChildren="0" ParentSplit="false">
</Child>
<Child ClusterNum="356" NumChildren="0" SplitAttribute="YJR060W" SplitValue="-1" ParentSplit="true">
</Child>
</Child>
</Child>
</Child>
<Child ClusterNum="355" NumChildren="0" SplitAttribute="YOR230W" SplitValue="-1" ParentSplit="true">
</Child>
</Root>
</TSCHierarchyClusterData>
</Expression>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>