在Perl中解析XML的方法最常见的就是使用 XML::DOM 和 XML::Simple了。 XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。这时就轮到轻便的XML::Simple上场了。
一、使用XML::Simple
XML::Simple如其名,真的很简单。假设XML(sample.xml)内容如下:
<opt>
<user login="grep" fullname="Gary R Epstein" />
<user login="stty" fullname="Simon T Tyson" >
<session pid="12345"/>
</user>
<text>This is a test.</text>
</opt>
那么只需这样写:
use XML::Simple;
use Data::Dumper;
$xml = XMLin('sample.xml');
print Dumper($xml);
使用XML::Simple 本身相当简单。XML::Simple 类的每个对象暴露两个方法:XMLin() 和 XMLout()。XMLin() 方法读取一个 XML 文件或字符串,然后将其转换成一个 Perl 表示;XMLout() 方法则正好相反,读取一个 Perl 结构并将其作为一个 XML 文档实例返回。上面的脚本使用XMLin() 方法读取前面创建的“sample.xml”然后将处理结果存储在 $xml 中。然后,$xml 的内容使用Perl 的 Data::Dumper 显示出来。
就可以轻而易举地将XML解析成一个hash,然后用foreach依次处理即可。
$VAR1 = {
'text' => 'This is a test.',
'user' => [
{
'fullname' => 'Gary R Epstein',
'login' => 'grep'
},
{
'session' => {
'pid' => '12345'
},
'fullname' => 'Simon T Tyson',
'login' => 'stty'
}
]
};
可以发现如下规律:
元素的标签名被用于hash的key。
单个元素的内容作为hash的value,多个重复的元素的内容被放到一个数组引用中作为hash的value
属性和子元素都以hash的key=>value对出现在元素的内容中
一个问题是,对单个元素和多个重复元素的处理结果不一致,就会导致foreach处理时比较麻烦(需要区分是标量还是数组引用),如上面的 text 和 user 的值。解决方法是添加选项 ForceArray => 1,就可以强制单个元素也放到数组引用中。
$xml = XMLin('sample.xml', ForceArray => 1);
print Dumper($xml);
运行结果(部分):
$VAR1 = {
'text' => [
'This is a test.'
],
'user' => [
......
另一个问题是,如果你的元素属性中包含id、name或key,那么元素就不再放到数组引用中,而是放到 hash引用中。比如下面的XML,注意与上面的结果的区别:
<opt>
<user id="grep" fullname="Gary R Epstein" />
<user id="stty" fullname="Simon T Tyson">
<session pid="12345"/>
</user>
<text>This is a test.</text>
</opt>
$VAR1 = {
'text' => [
'This is a test.'
],
'user' => {
'grep' => {
'fullname' => 'Gary R Epstein'
},
'stty' => {
'session' => [
{
'pid' => '12345'
}
],
'fullname' => 'Simon T Tyson'
}
}
};
user的内容不再是数组引用,而是hash引用,而id='grep'也变成了key存在。
要想禁用这个功能,应当指定选项 KeyAttr => ''。这个选项就是说,解析时应该把哪些属性作为hash的key来使用,默认值是['id', 'name', 'key']。
在XML::Simple的文档中,所有的选项都有详细说明,而KeyAttr和ForceArray选项被标为important,可见它们是多么常用了。
二、使用XML::DOM
分享到:
相关推荐
在标题和描述中提到的几个模块——Spreadsheet、XML::Simple以及DBD::mysql,分别对应了处理电子表格、解析XML文档以及与MySQL数据库交互的功能。 1. Spreadsheet模块:这个模块主要用于读取和写入电子表格文件。在...
第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB...
第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB计数器、来宾...
Perl社区活跃,有许多开源库和模块可供开发者使用,如CPAN(Comprehensive Perl Archive Network)——一个包含数万种模块的资源库,涵盖了网络、数据库、图形处理、XML解析等多个领域。这使得Perl在实际项目中具有...
安装完成后,学习设置环境变量以确保Perl脚本能正常运行。 2. **Perl语法基础** - 学习Perl的语句结构,包括注释、变量声明、赋值操作、输入/输出语句。了解Perl中的数据类型,如标量、数组、哈希以及引用。 3. **...
PB 存档脚本这是位于 Pirate Bay 档案的 Karel Bílek 脚本的最新分支前段时间,我做了一个实验,在保留重要信息的同时,我可以把 ... 对此我很抱歉,但 Karel 制作了可以修复它们的 perl 脚本,请参阅 。 该脚本需要
Perl 是一种功能强大的脚本语言,适合处理文本、数据解析以及各种系统任务。在 Snapper 中,Perl 脚本被嵌入到 XML 文件中,形成一个自包含的执行环境。这样,应用程序的所有组成部分——界面和逻辑——都被封装在一...
- **Perl**:Bugzilla依赖于Perl脚本语言,因此首先需要确保系统上已安装了合适的Perl版本。 - **数据库引擎**:Bugzilla支持多种数据库引擎,如MySQL和PostgreSQL等。 - **MySQL**:一种流行的开源关系型数据库...
它支持对比各种类型的文件,包括但不限于Java、HTML、C、C++、Perl脚本、SQL、XML等常见的编程语言和数据格式。此外,Beyond Compare 4还提供了丰富的自定义设置,允许用户根据个人习惯和项目需求调整对比规则,如行...
然后,Perl脚本解析这些源文件,根据预定义的规则进行必要的替换和处理,如动态插入搜索结果、填充元数据等。接着,生成的静态HTML文件将被组织成适合部署的结构,准备上传至服务器。 在处理微型站点时,“duckduck...
虽然现代实现中XML已不再必需,但AJAX的核心思想——异步通信,仍被广泛用于创建响应式Web应用。 **5. 安装与部署** 在使用Mibew前,你需要配置服务器环境,包括PHP解析器、MySQL数据库和适当的权限设置。安装过程...
8.1 编写简单的Perl脚本来获取页面 167 8.2 以编程方式更改参数 169 8.3 使用POST模仿表单输入 170 8.4 捕获和保存Cookie 172 8.5 检查会话过期 173 8.6 测试会话固定 175 8.7 发送恶意Cookie值 177 8.8 上传恶意...
从数据库接口到网络编程,从XML解析到图形用户界面,几乎你能想到的编程需求,CPAN都有相应的解决方案。 安装和使用CPAN模块,我们需要依赖一个工具——CPAN客户端。在大多数Unix/Linux系统中,Perl通常已经预装了...
7. XML处理:PHP5加强了XML处理能力,提供了SimpleXML、DOM、XMLReader和XMLWriter等库,方便解析和生成XML文档。 8. 正则表达式:PHP5使用了PCRE(Perl Compatible Regular Expressions)库,提供更强大的正则...
1. **文本转换**:开发者可以通过编写Ruby或Perl脚本来实现复杂的文本替换、格式化或者分析,然后在IDE内部直接应用这些脚本。 2. **代码美化**:可以使用外部工具对代码进行格式化,使其更符合编码规范。 3. **代码...
Augeas是一种配置文件解析和修改的工具,它支持多种配置文件格式,如Linux系统中的 Ini-like、XML、Shell脚本等。这个Perl模块使得在Perl程序中操作和管理这些配置文件变得更加方便。 Config-Augeas-MM模块的核心...
- 使用DOM解析器等工具来实现文本的解析与格式调整。 ##### 3. 结果展示与下载 - 将格式化后的文档内容呈现给用户预览。 - 提供下载链接,允许用户下载最终的格式化文档。 #### 五、总结 通过上述分析与设计,我们...
相比之下,脚本语言如Perl、Python、Java和Ruby更受青睐,特别是对于需要处理大量文本和网页内容的场景。其中,Python由于其简洁的语法、丰富的库支持、跨平台性以及在科学计算、数据分析、可视化等方面的优势,成为...
**标题与描述解析** 标题"基于PHP的Zend Framework 开源PHP开发框架 迷你版.zip"指出,这是一个针对PHP编程语言的开源开发框架——Zend Framework的迷你版本。Zend Framework是PHP社区中的一个著名框架,它提供了...