2012-03-27 6 views
2

XML::Twig을 사용하여 처음부터 새로운 XML 문서를 생성합니다. 루트 요소에는 접두사와 네임 스페이스 선언이 있어야합니다. 모든 자식도이 네임 스페이스에 속해야하며이 접두어를 사용해야합니다.XML :: Twig를 사용하여 XML을 생성하는 방법 이름 공간 선언과 접두사가 붙은 이름을 포함하고 있습니까?

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<abc:root xmlns:abc="http://www.somehost.com/abc-data/ns/5.0.0" version="5.0.0.0"> 
<abc:element name="myElement"> 
    This is my element 
</abc:element> 
</abc:root> 

나는 그것이 다소 같을 것이다 가정 :

my $new_twig = XML::Twig->new(map_xmlns => {'http://www.somehost.com/abc-data/ns/5.0.0' => "abc"}, pretty_print => 'indented'); 

my $root = XML::Twig::Elt->new('root'); 
$new_twig->set_encoding('UTF-8'); 
$new_twig->set_standalone("no"); 
$new_twig->set_root($root); 

my $element = XML::Twig::Elt->new('element' => {'name'=>'myElement}; 
$element->set_text('This is my element'); 
$element->paste(last_child=>$root); 

# print in a file 
open (TMP, "> $new_file_name"); 
select TMP; 
$new_twig->print(\*TMP); 
close TMP; 

이 간단하게 보일지도 모르지만, 난 여전히 Perl과에 뉴비 해요

출력은 다음과 같이해야한다 이것은 나에게 힘든 시간을주고있다! 도움 주셔서 감사합니다.

답변

4

XML::Twig 모듈은 처음부터 새로운 데이터를 작성하기보다는 기존 XML을 처리하는 데 더 중요합니다. 새로운 XML 문서를 만드는 데 필요한 것은 XML::Twig::Elt 클래스입니다. XML::Twig 클래스는 부적합합니다.

XML 문서를 작성하는 데는 여러 가지 방법이 있습니다. 다음은 예제로 표시 한 XML을 생성하는 예입니다

use strict; 
use warnings; 

use XML::Twig; 

my $new_file_name = 'new.xml'; 

my $root = XML::Twig::Elt->new('abc:root', { 
    'xmlns:abc' => "http://www.somehost.com/abc-data/ns/5.0.0", 
    version => "5.0.0.0", 
}); 
$root->insert_new_elt('abc:element' => {name => 'myElement'}, 'This is my element'); 
$root->set_pretty_print('indented'); 
$root->print_to_file($new_file_name); 

출력

<abc:root version="5.0.0.0" xmlns:abc="http://www.somehost.com/abc-data/ns/5.0.0"> 
    <abc:element name="myElement">This is my element</abc:element> 
</abc:root> 

UPDATE

이 최신으로 업그레이드하기 어려운 경우 버전 XML::Twig이면 0123으로 전화를 바꿈으로써 동일한 효과를 얻을 수 있습니다과

open my $out, '>:utf8', $new_file_name or die qq(Cannot create "$filename": $!); 
$root->print($out); 
+0

답장을 보내 주셔서 감사합니다. 이것은 좋아 보인다. 불행히도 그것은 실행되지 않지만 대신 'XML :: Twig :: Elt "패키지를 통해 객체 메서드"print_to_file "을 twig_test.ipl 줄 16에 배치 할 수 없습니다. – Hoodlet

+0

@Hoodlet -'print_to_file' 메소드가 추가되었습니다. 버전 3.36 내에서 - [변경 파일] (http://cpansearch.perl.org/src/MIROD/XML-Twig-3.39/Changes) – bvr

+0

참조 @Hoodlet : 다른 해결책을 제공하기 위해 답을 추가했습니다. 'XML :: Twig'의 이전 버전을 사용할 수 있습니다. – Borodin

관련 문제