2014-07-22 2 views
2

'B1 요소를'C '요소의 조상으로 삽입하고 싶습니다. 난 내 샘플 XML과 펄 코드를 붙여 넣은 아래요소의 조상 삽입 방법

입력

<A> 
    <B> 
    <C> 
    <D>name</D> 
    <E>number</E> 
    </C> 
    </B> 
    </A> 

출력

<A> 
    <B> 
    <B1></B1> 
    <C> 
     <D>name</D> 
     <E>number</E> 
    </C> 
    </B> 
    </A> 

나는이

<A> 
    <B> 
    <B1> 
    <C> 
     <D>name</D> 
     <E>number</E> 
    </C> 
    <B1> 
    </B> 
    </A> 
같은 출력이 필요하십니까

내 코드

나는 단지 요소의 제목은 acestor

#!/usr/bin/perl 

use strict; 

use warnings; 

use XML::LibXML; 

my $parser = XML::LibXML->new; 

my $doc = $parser->parse_file("mytest.xml"); 

my $root = $doc->getDocumentElement(); 

my ($ref_node) = $doc->findnodes('\A\B'); 

my $new_element= $doc->createElement("B1"); 

$ref_node->parentNode->insertAfter($new_element, $ref_node); 

print $root->toString(1); 

답변

3

당신은 내부 노드를 제거하고 새 요소에 삽입 할 필요가 만들지 않습니다 삽입하는 코드를 실행하면 :

#!/usr/bin/perl 
use warnings; 
use strict; 

use XML::LibXML; 

my $doc   = 'XML::LibXML'->load_xml(location => 'mytest.xml'); 
my $root  = $doc->getDocumentElement(); 
my $new_element = $doc->createElement('B1'); 

my ($parent) = $doc->findnodes('/A/B'); 
my ($inner) = $parent->findnodes('C'); 

$new_element->addChild($inner); 
$parent->addChild($new_element); 

print $root->toString(); 
또는 짧은 코드, XML::XSH2를 사용하여 :

open mytest.xml ; 
wrap B1 A/B/C ; 
save :b ;