当前位置:  开发笔记 > 编程语言 > 正文

如何从Perl创建XML?

如何解决《如何从Perl创建XML?》经验,为你挑选了4个好方法。

我需要在Perl中创建XML.根据我的阅读,XML :: LibXML非常适合解析和使用来自其他地方的XML.有没有人对XML Writer有任何建议?是XML ::作家仍然保持?有没有人喜欢/使用它?

除了功能完整性之外,我对一个易于使用的语法感兴趣,因此请在答案中描述您喜欢该模块的语法和任何其他原因.

请回答每个回答一个建议,如果有人已经回复了您的最爱,请将该回答投票.希望很容易看到最受欢迎的东西.

谢谢!



1> Cosimo..:

仅供记录,这是一个使用XML :: LibXML的片段.

#!/usr/bin/env perl

#
# Create a simple XML document
#

use strict;
use warnings;
use XML::LibXML;

my $doc = XML::LibXML::Document->new('1.0', 'utf-8');

my $root = $doc->createElement('my-root-element');
$root->setAttribute('some-attr'=> 'some-value');

my %tags = (
    color => 'blue',
    metal => 'steel',
);

for my $name (keys %tags) {
    my $tag = $doc->createElement($name);
    my $value = $tags{$name};
    $tag->appendTextNode($value);
    $root->appendChild($tag);
}

$doc->setDocumentElement($root);
print $doc->toString();

这个输出:



    blue
    steel



2> 小智..:

XML :: Writer仍然维护(至少,截至今年2月),它确实是最受欢迎的Perl XML编写者之一.

至于描述语法,最好查看模块的文档(链接已经在问题中).以机智:

use XML::Writer;

my $writer = new XML::Writer();  # will write to stdout
$writer->startTag("greeting", 
                  "class" => "simple");
$writer->characters("Hello, world!");
$writer->endTag("greeting");
$writer->end();

# produces Hello world!


回覆."清洁语法",上面例子中的"greeting"标签可以写成:$ writer-> dataElement("greeting","Hello,world!","class"=>"simple").我不知道这可能有多简单.
语法"也许"很长,但是XML :: Writer已经为我服务了8年多了.它是我在需要从Perl创建XML时首先达到的.对于更"性感"的东西,请查看XML :: Class(但请注意,自2005年以来,这一点尚未更新).

3> David Precio..:

如果你想在Perl中获取数据结构并将其转换为XML,那么XML :: Simple将很好地完成工作.

最简单的:

my $hashref = { foo => 'bar', baz => [ 1, 2, 3 ] };
use XML::Simple;
my $xml = XML::Simple::XMLout($hashref);

顾名思义,它的基本用法很简单; 但是如果你需要的话,它确实提供了很多功能.

当然,它也可以轻松解析XML.



4> Matt Siegman..:

我没有做太多的XML,但XML :: Smart看起来可能会做你想要的.请查看文档中的创建XML数据部分,它看起来非常简单易用.

解释文档:

use XML::Smart;

## Create a null XML object:
my $XML = XML::Smart->new() ;

## Add a server to the list:
$XML->{server} = {
    os => 'Linux' ,
    type => 'mandrake' ,
    version => 8.9 ,
    address => [ '192.168.3.201', '192.168.3.202' ] ,
} ;

$XML->save('newfile.xml') ;

哪个会把它放在newfile.xml中:


  
192.168.3.201
192.168.3.202

凉.我将不得不玩这个:)

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有