2012-08-04 5 views
-1

일부 XML 데이터에 새 요소를 추가해야한다는 요구 사항이 있습니다. 입력과 출력은 다음과 같습니다.XML 데이터에 새 요소를 추가하는 방법

여기서는 입력시와 같이 DINESH을 입력하고 새 요소를 만들어야합니다. oid 값은 위의 값보다 1 씩 증가해야합니다. 당신의 도움에 대한

<node nspc="DEFAULT" name="CEN509_DINESH" modl="MDL_DINESH" lcmd="node.sh" oid="5" /> 

감사

입력 :

<?xml version="1.0" encoding="UTF-8"?> 
<root user="gaia" pass="XY6jKWTTBfU=" desc="default user" mail="[email protected]"> 
    <node nspc="DEFAULT" name="CEN509_ASONI" modl="MDL_ASONI" lcmd="node.sh" oid="3" /> 
    <node nspc="DEFAULT" name="CEN509_ASTI" modl="MDL_ASTI" lcmd="node.sh" oid="4" /> 
</root> 

출력이 프로그램은 지난 <node> 요소, 클론을 발견하고 일을 조정

<?xml version="1.0" encoding="UTF-8"?> 
<root user="gaia" pass="XY6jKWTTBfU=" desc="default user" mail="[email protected]"> 
    <node nspc="DEFAULT" name="CEN509_ASONI" modl="MDL_ASONI" lcmd="node.sh" oid="3" /> 
    <node nspc="DEFAULT" name="CEN509_ASTI" modl="MDL_ASTI" lcmd="node.sh" oid="4" /> 
    <node nspc="DEFAULT" name="CEN509_DINESH" modl="MDL_DINESH" lcmd="node.sh" oid="5" /> 
</root> 
+1

출력 내가 늙어하고 알 -하지만 보통 내가 사양에 넣어 전에 약간 퍼지입니다! –

+0

입력 및 출력이 지정되지 않았습니다. 게시물을 입력 및 출력으로 편집하십시오. – RNJ

+0

고맙습니다. 나는 내가 장님이라고 생각했다! –

답변

2

e 속성 값을 가져 와서 복제 한 요소의 부모에 추가합니다.

use strict; 
use warnings; 

use XML::LibXML; 

my $doc = XML::LibXML->load_xml(string => <<'END', no_blanks => 1); 
<?xml version="1.0" encoding="UTF-8"?> 
<root user="gaia" pass="XY6jKWTTBfU=" desc="default user" mail="[email protected]"> 
    <node nspc="DEFAULT" name="CEN509_ASONI" modl="MDL_ASONI" lcmd="node.sh" oid="3" /> 
    <node nspc="DEFAULT" name="CEN509_ASTI" modl="MDL_ASTI" lcmd="node.sh" oid="4" /> 
</root> 
END 


my $input = 'DINESH'; 

my ($lastnode) = $doc->findnodes('/root/node[last()]'); 
my $newnode = $lastnode->cloneNode; 

my %attr = map { $_ => $newnode->getAttributeNode($_) } qw/ name modl oid /; 

my $val; 

$val = $attr{name}->getValue; 
$val =~ s/[^_]+$/$input/; 
$attr{name}->setValue($val); 

$val = $attr{modl}->getValue; 
$val =~ s/[^_]+$/$input/; 
$attr{modl}->setValue($val); 

$val = $attr{oid}->getValue; 
$attr{oid}->setValue($val + 1); 

$lastnode->parentNode->appendChild($newnode); 

print $doc->toString(1); 

<?xml version="1.0" encoding="UTF-8"?> 
<root user="gaia" pass="XY6jKWTTBfU=" desc="default user" mail="[email protected]"> 
    <node nspc="DEFAULT" name="CEN509_ASONI" modl="MDL_ASONI" lcmd="node.sh" oid="3"/> 
    <node nspc="DEFAULT" name="CEN509_ASTI" modl="MDL_ASTI" lcmd="node.sh" oid="4"/> 
    <node nspc="DEFAULT" name="CEN509_DINESH" modl="MDL_DINESH" lcmd="node.sh" oid="5"/> 
</root> 
관련 문제