我需要调用API到NetApp文件服务器。 我知道原始的XML我需要发送:
<? xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE netapp SYSTEM "file:/etc/netapp_filer.dtd">
<netapp version="1.7" vfiler="somevfiler" xmlns="http://www.netapp.com/filer/admin">
<nfs-exportfs-list-rules>
<pathname>/vol/path/to/somewhere</pathname>
</nfs-exportfs-list-rules>
</netapp>
已经开始组装为“纯文本”,我一直在试图与“做得更好” XML::Twig
。
但我在与插入前两行的困难,因为他们不是XML树的“部分”。
我翻出XML::Twig::Elt
和想通了,我可能需要set_pi
拿到第一线,但......嗯,我有一些困难,在所需的输出。
到目前为止我有:
use strict;
use warnings;
use XML::Twig;
my $content = XML::Twig::Elt->new(
'netapp',
{ version => 1.7,
vfiler => "somevfiler",
xmlns => "http://www.netapp.com/filer/admin",
},
);
$content->insert_new_elt('nfs-exportfs-list-rules')
->insert_new_elt( 'pathname', '/vol/path/to/somewhere' );
$content->set_pretty_print('indented');
$content->print;
并分别:
my $header = XML::Twig::Elt -> new () -> set_pi('xml', 'version="1.0" encoding="utf-8"');
$header -> print;
对于DOCTYPE我有:
my $twig = XML::Twig -> new ();
$twig -> set_root($content);
$twig -> set_doctype('netapp SYSTEM "file:/etc/netapp_filer.dtd"');
$twig -> print;
但我想不通的是如何“合并”头进去。 如果我做一个简单:
$twig -> root -> set_pi('xml', 'version="1.0" encoding="utf-8"');
它则会覆盖的内容。 我缺少的是在这里吗? 是否有插入,最初的一个更好的办法xml
行?
我发现: <!DOCTYPE> <?XML版本= “1.0”>如何阅读和修改标签和XML小枝?
但是,这完全不是那么回事,因为我需要一个行 - 我的文档类型之前。
例如:
my $twig = XML::Twig -> new ( 'pretty_print' => 'indented' );
$twig -> set_root($content);
$header -> move ( before => $twig -> root );
$twig -> set_doctype('netapp SYSTEM "file:/etc/netapp_filer.dtd"');
$twig -> print;
生产:
<!DOCTYPE netapp SYSTEM "file:/etc/netapp_filer.dtd">
<?xml version="1.0" encoding="utf-8"?><netapp version="1.7" vfiler="somevfiler" xmlns="http://www.netapp.com/filer/admin">
<nfs-exportfs-list-rules>
<pathname>/vol/path/to/somewhere</pathname>
</nfs-exportfs-list-rules>
</netapp>
这是接近,但并不完全有...