Вставка элементов, когда идентификатор не равен - PullRequest
1 голос
/ 13 августа 2010

Я хотел бы вставить файл updev.xml в файл mainea.xml, если $ upd_dev_id не равен.Попробовал это ниже, но он не будет вставлен.Замена работ.

#!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
  }

1 Ответ

1 голос
/ 14 августа 2010

insert не делает то, что вы думаете, он делает, он не вставляет элемент, он вставляет тег под существующим элементом. То, что вы хотите, это вставить.

сравнить:

вставка ($ tag1, [$ необязательный_atts1], $ tag2, [$ необязательный_atts2], ...)

Для каждого тега в списке вставляется элемент $ tag как единственный дочерний элемент элемента. Элемент получает необязательные атрибуты в «$ option_atts». Все дочерние элементы элемента устанавливаются как дочерние элементы нового элемента. Элемент верхнего уровня возвращается.

с:

вставить ($ option_position, $ ref)

Вставить (ранее «вырезанный» или вновь созданный) элемент. Умри, если элемент уже принадлежит дереву.

Возможно, вам придется вырезать или скопировать элемент, прежде чем вставлять его в новое дерево.

...