我正在使用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的新手,这让我很难过! 谢谢你的帮助!!!
答案 0 :(得分: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>
<强>更新强>
如果很难升级到XML::Twig
的最新版本,则可以通过将调用替换为print_to_file
来实现等效的效果
open my $out, '>:utf8', $new_file_name or die qq(Cannot create "$filename": $!);
$root->print($out);