使用 Perl 的 XML::Simple 解析 XML 文档

深入解析Perl的XML::Simple模块 XML(Extensible Markup Language)因其强大的数据描述能力和跨平台的兼容性,在数据交换领域得到了广泛应用。在Perl语言中,处理XML文件的需求催生了XML::Simple模块的诞生。XML::Simple是一个简单易用的Perl模块,它能够将XML文件转换为Perl的数据结构,并允许用户以更便捷的方式访问和操作XML数据。尽管它名为“Simple”,但其提供的功能足以应对大多数基本的XML解析任务。 阅读详情

 

随着越来越多的 Web 站点开始使用 XML 作为他们的内容,Web 开发人员知道如何解析 XML 数据并将其转换成不同的格式突显重要起来。以前有两种方法实现这一点:设计一些回调处理函数,在一个特定的元素类型被识别时这些回调处理函数被调用(SAX),或者创建一个 XML 文档树,并使用树导航方法访问单独的内容片断(DOM)。

两种方法有一个共同的要点:实现起来不易,尤其是对于 XML 新手来说更是如此。Web 开发人员真正需要的是一些能够使解析 XML 数据像遍历数组或读取文件一样简单的东西。

这就是非常有用的 Perl 模块XML::Simple 出现的原因。它消除了解析XML 数据的痛苦,使得这一过程比你能想象的还要简单。在读完这篇文章之后,你就会知道从如何将 XML 数据转换成 Perl 可用的格式以及如何根据 Perl 哈希创建 XML 文件。

 

安装

XML::Simple 能够解析一个 XML 文件并在以一个 Perl 哈希引用返回数据。在这个哈希中,来自原始 XML 文件的元素作为键,而它们之间的 CDATA 作为值。一旦XML::Simple 处理完一个 XML 文件,XML 文件的内容就可以使用标准 Perl 数组表示法检索。

XML::Simple 完全用 Perl 写成,它是作为XML::Parser 模块之上的一个 API 层实现的,目前由Grant McLean 维护。它捆绑在最新的 Perl 发布中,但是如果你没有最新的 Perl 发布,获取该模块的最简单的方法是从 CPAN 下载。在下载的压缩文件中提供了详细的安装说明,但是目前为上最简单的安装方法是使用 CPAN shell:

shell> perl -MCPAN -e shell
cpan> install XML::Simple

如果使用 CPAN shell,依赖模块会被自动下载(除非你将 shell 配置为不下载依赖模块)。如果手工下载和安装这个模块,那么在安装XML::Simple 之前你可能需要先下载和安装XML::Parser 模块。这篇文章使用的XML::Simple 版本是2.12。

 

基本的 XML 解析

在安装了这个模块之后,创建下面的 XML 文件然后保存为“data.xml”。

<?xml version='1.0'?>
<employee>
        <name>John Doe</name>
        <age>43</age>
        <sex>M</sex>
        <department>Operations</department>
</employee>

然后敲入以下 Perl 脚本,这段脚本使用XML::Simple 模块解析了前面的 XML。

#!/usr/bin/perl

# use module
use XML::Simple;
use Data::Dumper;

# create object
$xml = new XML::Simple;

# read XML file
$data = $xml->XMLin("data.xml");

# print output
print Dumper($data);

使用XML::Simple 本身相当简单。XML::Simple 类的每个对象暴露两个方法:XMLin() 和 XMLout()。XMLin() 方法读取一个 XML 文件或字符串,然后将其转换成一个 Perl 表示;XMLout() 方法则正好相反,读取一个 Perl 结构并将其作为一个 XML 文档实例返回。上面的脚本使用XMLin() 方法读取前面创建的“data.xml”然后将处理结果存储在 $data 中。然后,$data 的内容使用Perl 的 Data::Dumper 显示出来。

在运行这个脚本时,会得到下面的输出:

$VAR1 = {
          'department' => 'Operations',
          'name' => 'John Doe',
          'sex' => 'M',
          'age' => '43'
        };

从上面的结果可以看到,每个元素和与其相关的内容都被转换成一个键值对 Perl 关联数组。你现在可以把上面的脚本反向改为下面的脚本来访问 XML 数据:

#!/usr/bin/perl

# use module
use XML::Simple;

# create object
$xml = new XML::Simple;

# read XML file
$data = $xml->XMLin("data.xml");

# access XML data
print "$data-> is $data-> years old and works in the $data-> section ";

下面是输出:

John Doe is 43 years old and works in the Operations section [/output]

下面让我们看一下如何使用 XML::Simple 来处理更复杂的 XML 文档。

 

处理多级文档树

XML::Simple 的基本 XML 处理功能的易用性也可以扩展到具有多级的 XML 文档上。考虑列表A中的 XML 文件。如果使用 XMLin() 方法读取这个 XML 文件,你将会得到与列表B所示内容相似的结构。

XML::Simple 在一个匿名数组中将重复的元素表示为项。因而,XML 文件中的各个<employee> 元素被转换成一个 Perl 数组,每个数组元素表示一个 employee。所以,如果要访问值“John Doe”,只需要简单地使用下面这个语法:$data->->[0]->。

你还可以在一个 Perl 脚本中通过解引用$data-> 然后使用 foreach() 循环遍历数组来做到这一点。列表C中的代码是这样一个例子。下面是其输出:

John Doe
Age/Sex: 43/M
Department: Operations

Jane Doe
Age/Sex: 31/F
Department: Accounts

Be Goode
Age/Sex: 32/M
Department: Human Resources

处理属性(attribute)

XML::Simple 处理属性的方式与它处理元素的方式基本相同——把它们放到一个哈希中。考虑列表D中的 XML 文件。

如果使用XML::Simple 解析列表D中的 XML 文件,输出将会类似于列表E。注意每个元素的内容被放在一个特殊的键“content”中,你可以使用前面讨论的标准表示法来访问这个键。

控制解析行为

用于控制XML::Simple 行为的两个有用的选项是ForceArray 和KeyAttr 选项,这两个选项一般都传递给对象构造器。ForceArray 选项是一个布尔标志,它告诉XML::Simple 将 XML 元素转换成常规的加了索引的数组,而不是转换成哈希。列表F中的代码片断举例说明了这一点。下面是列表F的输出:

$VAR1 = {
          'department' => [
                          'Operations'
                        ],
          'name' => [
                    'John Doe'
                  ],
          'sex' => [
                   'M'
                 ],
          'age' => [
                   '43'
                 ]
        };

如果想要在 Perl 中创建 XML 文档的一致表示,那么这个输出是很有用的。简单地将所有元素和属性强迫转成一个数组形式,然后使用 Perl 的数组函数来处理它们。

另外一个重要的选项是KeyAttr,它告诉XML::Simple 在构建XML 文档的哈希表示时使用一个特定的元素作为一个唯一“键”。在指定这样一个键之后,对应元素的值(而不是其名字)被用作哈希引用中的一个键,它充当快速访问相关数据的一个索引。

理解这个选项的最好方式是看例子。考虑列表G中的 XML 文件。如果使用XML::Simple 解析这个文件,一般会得到列表H中的一个 Perl 结构。然而,如果告诉XML::Simple 使用 SKU 域作为每个项的一个唯一索引,将它作为KeyAttr 选项传递给构造器,如下所示:

$xml = new XML::Simple (KeyAttr=>'sku');

生成的 Perl 结构就会变为使用那个元素的值作为键,在列表I中可以看到其结果。这样就允许你直接使用 SKU 访问一个项——例如,$data->->->。

 

将 Perl 结构写到 XML

最后,你还可以使用XML::Simple 的 XMLout() 方法将一个 Perl 对象转换成一个 XML 文档。下面是一个例子:

#!/usr/bin/perl

# use module
use XML::Simple;
use Data::Dumper;

# create array
@arr = [
        {'country'=>'england', 'capital'=>'london'},
        {'country'=>'norway', 'capital'=>'oslo'},
        {'country'=>'india', 'capital'=>'new delhi'} ];

# create object
$xml = new XML::Simple (NoAttr=>1, RootName=>'data');

# convert Perl array ref into XML document $data = $xml->XMLout(@arr);

# access XML data
print Dumper($data);

下面是它的输出:

<data>
<anon>
    <anon>
      <country>england</country>
      <capital>london</capital>
    </anon>
    <anon>
      <country>norway</country>
      <capital>oslo</capital>
    </anon>
    <anon>
      <country>india</country>
      <capital>new delhi</capital>
    </anon>
</anon>
</data>

无须多说,这个同样的 XML 文档可以被XML::Simple 读取并重新创建原始的 Perl 结构。

这就是本篇文章的内容。希望你能够更好地理解XML::Simple 的名称的含义所在,下次能够使用 Perl 来解析 XML 文件。

perl的xml::simple解析文件 包含simple和parser 很好用的xml解析文件 立即下载

相关推荐

perl读写xml文件

NULL 博文链接:https://zhych8419-163-com.iteye.com/blog/1030013

linux 安装xml文件,Linux下XML::Simple无root权限安装

XML::Simple简介XML::Simple 基本上有两个功能;它将 XML 文本文档转换为 Perl 数据结构(匿名散列和数组的组合),以及将这种数据结构转换回 XML 文本文档。提供了两个函数:XMLin() 和 XMLout()。第一个子函数读取 XML 文件,返回一个引用。给出适当数据结构的引用,第二个子函数将它转换为 XML 文档,根据参数的不同,产生的 XML 文档采用字符串格式或...

weixin_32430445的博客 1525

DisplayPort 1.4扰码原理与16位并行LFSR实现

DisplayPort物理层信号完整性依赖于数据扰码技术,其本质是通过线性反馈移位寄存器(LFSR)对传输数据进行伪随机化处理,以改善频谱分布、抑制低频能量堆积、提升时钟恢复能力并降低EMI辐射。该技术广泛应用于高速串行接口如DP、PCIe和USB,核心在于确定性伪随机序列生成与收发端同步。DisplayPort 1.4强制要求符合ANSI X3.230标准的16级LFSR,并在8b/10b编码后执行扰码;而传统串行实现难以满足21.6Gbps速率下的时序约束,必须采用并行展开结构——将16拍移位压缩为单周

weixin_29192211的博客 313

perl解析xml-XML::Simple/XMLin

  转自: http://blog.charlee.li/perl-xml-simple/   [Perl]用XML::Simple解析XML文件 在Perl中解析XML的方法最常见的就是使用 XML::DOM 和 XML::Simple了。 XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。 对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。 这时就轮到轻便...

weixin_33873846的博客 298

基于555定时器的D类功放设计:从PWM原理到无反馈电路实践

D类功放(数字功放)是一种高效率的音频放大技术,其核心原理是脉冲宽度调制(PWM)。它将输入的模拟音频信号转换为一系列高速开关的脉冲,通过控制功率开关管(如MOSFET)的通断,再经低通滤波器还原放大后的音频。相比传统AB类功放,其转换效率通常超过90%,显著降低了热能损耗。这项技术在追求高能效和小型化的现代音频设备中价值凸显,广泛应用于有源音箱、汽车音响和便携式设备。本文聚焦于一种独特的实现方案:以经典的555定时器芯片为核心,构建一个无整体负反馈的D类功放。通过剖析其PWM调制器、FET电压-电流转换级

weixin_30162121的博客 222

AI Agent ReAct架构设计模型剖析

ReAct通过"思考-行动-观察"循环运作:智能体先进行自然语言推理,再调用外部工具执行行动,观察结果后继续推理直至解决问题。这种架构提高了透明度和准确性,减少幻觉风险,使LLM能主动分解任务并利用外部数据源。实现关键在于精心设计的提示模板,引导LLM按结构化格式响应,而非依赖模型固有能力。

weixin_43939320的博客 1250

macos操作系统安装perl

大家可以参考链接:link. 我其实是想使用慢查询工具:pt-query-digest的 所以安装perl curl -L https://install.perlbrew.pl | bash Once this is finished (it takes several minutes), quit the Terminal app. 我反正装了蛮久的 不知道是不是网的问题,一直在等等等。大概要十分钟吧! ## 看是否安装成功 pt-query-digest --help ##看系统信息 pt-

qq_22583191的博客 3784

YOLOv8实例分割实战:从LabelMe标注到模型训练全流程(附完整代码)

本文详细介绍了YOLOv8实例分割的完整实战流程,涵盖从使用LabelMe进行数据标注、格式转换,到构建数据集、配置参数并完成模型训练的全过程。文章提供了详尽的代码示例和常见问题解决方案,旨在帮助开发者高效掌握YOLOv8实例分割技术,快速应用于实际项目。

java5的博客 816

perl xml_XML加Perl-简直就是魔术

这是有关Perl和XML的由三部分组成的系列文章中的第一篇,该系列关注XML::Simple 。 对于Perl程序员而言,XML的最常见的首次使用是从配置文件中检索参数。 本文向您展示如何用两行代码读取这样的参数,第一行告诉Perl正在使用XML::Simple ,第二行告诉Perl在文件中将变量设置为值。 您甚至不必提供配置文件的名称: XML::Simple可以做出明智的猜测。 举一个...

cuyi7076的博客 1261

J-LINK下载程序出现No Cortex-M Device found in JTAG chain…问题,最全7种解决方法

J-Link下载程序出现No Corect 等的问题的7种方法 后来编辑JLinkSettings.ini文件,找到"Device"项,将其更改Device="Cortex-M0+"

cjmsea的博客 5613

【DRAM存储器六十五】DDR5介绍--训练相关之MPC、Read Training Pattern、Read Preamble Training Mode

简述DDR5 MPC操作和读训练时颗粒输出pattern的配置

highman110的博客 363

perl基本的 XML 解析

在安装了这个模块之后,创建下面的 XML 文件然后保存为“data.xml”。John Doe43MOperations然后敲入以下 Perl 脚本,这段脚本使用XML::Simple 模块解析了前面的 XML。#!/usr/bin/perl# use moduleuse XML::Simple;use Data::Dumper;# create object$xml = new XML::Simple;# read XML file$data = $xml->XMLin("data.x

xj_sir的专栏 1015

使用Prophet进行时间序列预测

Prophet是Facebook开发的开源时间序列预测工具,用于处理时间序列数据的建模和预测。它建立在统计模型之上,适用于多种时间序列预测问题,具有易用性和灵活性。能够处理缺失值和异常值支持对节假日和季节性的建模可以灵活地添加自定义的季节性成分自动检测变化点提供了直观的可视化工具这个简短的教程为您提供了使用Prophet进行时间序列预测的基本步骤和一些重要的概念。您可以通过阅读Prophet官方文档和其他在线资源来进一步深入学习和了解更多细节。

Mrrunsen的博客 480

perl使用xml::simple来读写xml

一 读xml 1)xml实例 linux US mac US windows US   2)代码 use File::Basename; use XML::Simple; use Data::Dumper; my $xmlfile = dir

Balder~专栏 1532

训练YOLOv11 | Pytorch和Pycharm的安装教程适用W11系统(附详细的系统变量添加过程)

根据你之前下载的版本选择对应的选项即可,然后复制底下的绿色代码到Anaconda的命令行输入即可(这里要在你安装的python环境里进行安装,例如我的环境名字是PyTorch,那么就是activate PyTorch里进行安装)然后同之前一样会加载一会,然后会询问我们是否下载配件,我们输入Y等待即可(下载过程中我们要确保网络通常如果有波动可能会下载失败)。类似于我的电脑是Windows11选择上面红框内的选项即可点击后即下载,(注意这里下载的是zip文件)下载完成后复制下面几个文件。

Snu77的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

perl XML解析

随着越来越多的 Web 站点开始使用 XML 作为他们的内容,Web 开发人员知道如何解析 XML 数据并将其转换成不同的格式突显重要起来。以前有两种方法实现这一点:设计一些回调处理函数,在一个特定的元素类型被识别时这些回调处理函数被调用(SAX),或者创建一个 XML 文档树,并使用树导航方法访问单独的内容片断(DOM)。 两种方法有一个共同的要点:实现起来不易,尤其是对于 XML 新手来说更

finger0的专栏 4201

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

6.5. XML::Simple

use strict; use XML::Simple qw(:strict); my $xml =q(<?xml version='1.0'?> <library> <book> <isbn>0596001320</isbn> <title>Learnin...

weixin_34248023的博客 141

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

用perl XML::Simple解析XML文件

<br />在Perl中解析XML的方法最常见的就是使用 XML::DOM 和 XML::Simple了。 XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。这时就轮到轻便的XML::Simple上场了。<br />XML::Simple如其名,真的很简单。假设XML内容如下:<opt> <user login="grep" fullname="Gary R Epstein" /> <user login="

RTC hacker 3104

用perl XML::Simple解析XML文件

转自: http://blog.csdn.net/perfectpdl/article/details/5936372 在Perl中解析XML的方法最常见的就是使用 XML::DOM 和 XML::Simple了。 XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。这时就轮到轻便的XML::Simple上场了。

shang322的专栏 1432

Perl XML::Simple parse simple xml file

用Perl解析xml文件,又不想下载其它模块如Dom,可以用XML::Simple来完成这个任务。 实际工作中用到的几个有用的属性: 1. KeepRoot => 1 生成的hash中显示根节点,否则从下一层节点开始显示。 2. ForceContent => 1 生成的hash中以hash结构保存节点值,如: nodename => { content => 'value

USTBHacker的专栏 1924

perl解析XML的性能比较

perl XML模块 perl解析XML实现方式有很多模块。下面总结一些。 模块 说明 XML::Simple 用于读写 XML 的普通 API,最好与 XML 格式的配置文件一起使用 XML::LibXML gnome libxml2 库的 Perl 接口,用于高性能的 DOM 处理 XML::Parser 用于 James Cl

Gamma Gao的专栏 38万+

[Perl]用XML::Simple解析XML文件

在Perl中解析XML的方法最常见的就是使用 XML::DOM 和 XML::Simple了。XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。这时就轮到轻便的XML::Simple上场了。XML::Simple如其名,真的很简单。假设XML内容如下:

Technology world 1030
上一篇: [perl]defined的用法
下一篇: 基于 STAF 和 XML 配置文件的跨平台自动化测试部署
snlying
博客等级 码龄21年 152粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值