[Perl]利用XML::DOM生成XML文档

来源:互联网 发布:angularjs和vue.js 编辑:程序博客网 时间:2024/05/16 14:16
Perl的XML::DOM功能很强大,利用它可以轻易地分析XML文档,也可以建立XML文档。
常用的类包括:
XML::DOM::Node:所有类的基类,表示一个XML节点。
XML::DOM::Parser:XML解析器,将XML字符串解析成XML::DOM::Document对象。
XML::DOM::Document:指向XML文档的根节点。
XML::DOM::Element:指向一个元素,通常由XML::DOM::Document->createElement元素生成。
其他的类可以查看CPAN
上关于 XML::DOM 的说明。
建立XML文档的通常做法是:首先通过 XML::DOM::Parser生成一个Document对象,
再通过这个Document对象的 createElement、createTextNode 等方法生成各个节点,
最后通过 XML::DOM::Node->appendChild 方法将节点添加到Document对象中,
最后再通过 toString 方法将 Document 转换为字符串输出。
下面是建立XML文档的一个例子:
#!/usr/bin/perl
use XML::DOM;
use XML::Twig;
# 创建XML的最外层元素
my $xml = "";
# 通过XML::DOM::Parser解析外层元素,创建基础XML文档
# XML::DOM::Parser::parse函数的返回值为 XML::DOM::Document 类
my $parser = new XML::DOM::Parser;
my $dom = $parser->parse($xml);
# 生成Book节点
# createElement的返回值为 XML::DOM::Element 类
# XML::DOM::Element 的父类是 XML::DOM::Node 类
my $book = $dom->createElement("Book");
# 设置节点属性
$book->setAttribute("title", "My First Book");
$book->setAttribute("author", "charlee");
# 生成Chapter节点
my $chapter = $dom->createElement("Chapter");
$chapter->setAttribute("id", "1");
# 生成一个文本节点
my $title = $dom->createTextNode("My First Chapter");
$chapter->appendChild($title);
# 添加Chapter到Book
$book->appendChild($chapter);
# 添加Book到XML文档
$dom->getDocumentElement->appendChild($book);
# 利用XML::Twig整理格式
my $twig = new XML::Twig;
$twig->set_indent(" "x4);
$twig->parse($dom->toString);
$twig->set_pretty_print("indented");
# 输出
print $twig->sprint;
最后一段使用XML::Twig的程序只是为了整理XML输出结果的格式,
如果不需要整理格式,不调用XML::Twig,直接使用$dom->toString也可以。
0 0