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
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: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.