I have written some perl that SHOULD search a xml file and change some elemnts, but it fails when I try to change the element. The code is below followed by the xml.
use TeamSite::WFtask; use TeamSite::WFworkflow; use LWP::UserAgent; use XML::DOM; $iwhome = getiwhome(); $iwmnt = getiwmount(); my $task = new TeamSite::WFtask($ARGV[1]); my $task_id = $ARGV[1]; my $workarea = $task->GetArea(); my @iw_files = $task->GetFiles(); my $iw_file; $modDir = $workarea; $modDir =~ s!/!\\!i; #loop over files foreach $iw_file (@iw_files) { $iw_file =~ m#templatedata\\([^\\]*)\\([^\\]*)\\data\\(.*)#; my $category = $1; my $type = $2; my $dcr = $3; my $dcr = "test.xml"; #$iw_file = "e:\\iw-home\\bin\\bespoke\\test.xml"; if ($dcr){ print " Category : $category \n"; print " Type : $type \n"; print " DCR : $dcr \n"; #if ($type eq "mainarticle"){ print " File : $iw_file \n"; $xml = change_dcr_attr("$iwmnt$modDir\\$iw_file","External + Link Heading","test","file",""); $xml =~ s/\r/ /g; $xml =~ s/\n/ /g; $xml =~ s/\t/ /g; $xml =~ s/ //g; print "$xml"; $xml = change_dcr_attr("$iwmnt$modDir\\$iw_file","Body Cop +y Heading","test","string",$xml); print "$xml"; #} } } sub change_dcr_attr { #print " And the games begin... \n"; my ($dcr,$element_name,$element_value,$type,$xml) = @_; my $parser=new XML::DOM::Parser; #parse the document print "type : $what \n"; if ($type eq "file"){ $dcr_doc=$parser->parsefile($dcr) || die "unable to parse docum +ent: $!"; } else { $dcr_doc=$parser->parsestring($xml) || die "unable to parse doc +ument: $!" } #get all tags my $dcr_items = $dcr_doc->getElementsByTagName('item'); # iterate over all tags for my $i (0..$dcr_items->getLength-1) { my $dcr_item=$dcr_items->item($i); # get the value of the ‘name’ attrribute my $dcr_item_name = $dcr_item->getAttribute("name"); #process only required field #e.g.’Surname’ next unless $dcr_item_name eq $element_name; # drill down to the tag my $dcr_item_child = $dcr_item->getFirstChild; # get down to the text we want to change my $dcr_text_node = $dcr_item_child->getFirstChild if defined $dc +r_item_child; if (defined ($dcr_text_node)) { if (( $dcr_text_node->getNodeType == TEXT_NODE) ) { # finally change the value $dcr_text_node->setData($element_value); } } else { if ($type eq "string"){ print "Error\n"; return 0; } } } return $dcr_doc->toString; #return the whole DCR XML as a string } sub getiwhome { my $iwhome = TeamSite::Config::iwgethome(); #only needed on solaris #$iwhome =~ s#\\#/#g; return $iwhome; } sub getiwmount { my $iwmount = TeamSite::Config::iwgetmount(); $iwmount =~ s#\\#/#g; return $iwmount; } <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <record name="ktest"> <item delimiter=", " name="______________________ PRIMARY CON +TENT"> </item> <item delimiter=", " name="File Location"> <value>tech</value> </item> <item delimiter=", " name="Body Copy Heading"> <value>fffffffffffffffffffffffffsdsdsd</value> </item> <item delimiter=", " name="Body Replicant"> <value> <item delimiter=", " name="Body Copy"> <value>test</value> </item> <item delimiter=", " name="______________________ I +MAGES"> </item> <item delimiter=", " name="Image"> <value></value> </item> <item delimiter=", " name="Caption Heading"> <value></value> </item> <item delimiter=", " name="Caption Copy"> <value></value> </item> </value> </item> </record>
Edited 2001-03-23 by Ovid

In reply to parse xml by lablett

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.