1

如果 $upd_dev_id 不相等,我想将 updev.xml 插入 mainea.xml。在下面尝试了这个,但它不会插入。更换作品。

#!c:\perl\bin\perl.exe
use strict;
use XML::Twig;

my $upd_file = "updev.xml" ;
my $main_file = "mainea.xml" ;


# get the info we need by loading the update file
my $t_upd= new XML::Twig();
$t_upd->parsefile( $upd_file);

my $upd_dev_id = $t_upd->root->next_elt( 'DEVNUM')->text;
my $upd_dev    = $t_upd->root->next_elt( 'DEVS');

# now process the main file
my $t= new XML::Twig( TwigHandlers => { DEVS => \&DEVS, },
        PrettyPrint => 'indented',
      );
$t->parsefile( $main_file);
$t->flush;           # don't forget or the last closing tags won't be printed

sub DEVS
  { my( $t, $DEVS)= @_;
    # just replace devs if the previous dev_id is the right one
    if( $DEVS->prev_elt( 'DEVNUM')->text eq $upd_dev_id) {
      $upd_dev->replace( $DEVS); 
    }
    else
    {
      $upd_dev->insert( $DEVS);
    }

    $t->flush;    # print and flush memory so only one job is in there at once
  }
4

1 回答 1

1

insert 不会像您认为的那样做,它不会插入元素,它会在现有元素下插入标签。你想要的是粘贴。

相比:

插入 ($tag1, [$optional_atts1], $tag2, [$optional_atts2],...)

对于列表中的每个标签,插入一个元素 $tag 作为该元素的唯一子元素。该元素在“$optional_atts”中获取可选属性。元素的所有子元素都设置为新元素的子元素。返回上层元素。

和:

粘贴 ($optional_position, $ref)

粘贴(以前“剪切”或新生成的)元素。如果元素已经属于一棵树,则死亡。

在将元素粘贴到新树之前,您可能必须剪切或复制元素。

于 2010-08-14T12:59:12.257 回答