- my $value = $r->param($key);
- my $ref = $fieldsByKey{$key} or die "no field '$key'";
- my($name, $nlines, $caption, $xpath, @addAfter) = @$ref;
- my @nodes = $xc->findnodes($xpath);
- if (@nodes) {
- warn scalar(@nodes), " nodes match '$xpath'" if @nodes > 1;
- my $node = $nodes[0];
- if ($node->isa("XML::LibXML::Attr")) {
- $node->setValue($value);
- #print "Attr $key <- '$value' ($xpath)<br/>\n";
- } elsif ($node->isa("XML::LibXML::Element")) {
- my $child = $node->firstChild();
- die "element child $child is not text"
- if !ref $child || !$child->isa("XML::LibXML::Text");
- $child->setData($value);
- #print "Elem $key <- '$value' ($xpath)<br/>\n";
- } else {
- warn "unexpected node type $node";
- }
- } else {
- next if !$value;
- my($ppath, $element) = $xpath =~ /(.*)\/(.*)/;
- dom_add_element($xc, $ppath, $element, $value, @addAfter);
- }
+ $data{$key} = $r->param($key);
+ }
+
+ $nchanges = modify_xml_document($xc, \%fieldsByKey, \%data);
+ if ($nchanges) {
+ ### Set e:metaInfo/e:dateModified