当前位置: 首页 > news >正文

perl 用 XML::LibXML 解析 Freeplane.mm文件,XML文件

Perl 官网 www.cpan.org
从 https://strawberryperl.com/  下载网速太慢了
建议从 https://download.csdn.net/download/qq_36286161/87892419
下载 strawberry-perl-5.32.1.1-64bit.zip  约105MB
解压后安装.msi,装完后有520MB+,建议安装在D:盘

在云计算中,解析XML元素和属性是一种常见的操作,因为XML是一种常见的数据交换格式,可以用来表示各种不同的数据结构和信息。Perl 是一种过去流行的脚本语言,可以用来处理各种文本数据,包括XML数据。

在Perl 中,可以使用各种模块和函数来解析 XML元素和属性。其中,最常用的模块是  XML::LibXML,它提供了一组完整的XML解析和处理函数,可以非常方便地解析XML文档中的元素和属性。

例如,下面是一个使用 XML::LibXML 模块解析 XML元素和属性 的示例代码:

编写 test_LibXML.pl  如下

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use XML::LibXML;if ($#ARGV != 0){die "You must specify a file.xml to parse";
}
my $file = shift @ARGV;# 创建一个XML解析器对象
my $parser = XML::LibXML->new();# 解析XML文档
my $doc = $parser->parse_file($file)or die "cannot read file.xml\n";my $f2 = $file .'.txt';
# 写入文件
open(my $fw, '>:encoding(UTF-8)', $f2) or die "cannot open file '$f2' $!";# 获取所有的元素节点
my @nodes = $doc->findnodes('//node');# 遍历所有的元素节点
foreach my $node (@nodes) {# 获取元素名称if( $node->nodeName() eq 'node'){# 获取所有的属性my @attrs = $node->attributes();# 遍历所有的属性foreach my $attr (@attrs) {# 获取属性名称和属性值if( $attr->nodeName() eq 'TEXT'){my $txt = $attr->value();# 输出属性值 #Encode::_utf8_on($txt);print $fw "$txt\n"; }    }}
}
close($fw);

运行 cmd
chcp 65001
perl test_LibXML.pl your_test.mm

在这个示例代码中,我们首先使用XML::LibXML模块创建了一个XML解析器对象,然后使用parse_file函数解析了一个名为 your_test.mm 的XML文件。接着,我们使用findnodes函数获取了所有的元素节点,并遍历了每个元素节点,获取了元素名称和所有的属性。最后,我们遍历了每个属性,获取了属性名称和属性值,并输出了这些信息。

在Windows10系统中Perl安装Tk模块

#!/usr/local/bin/perl
use strict;
use warnings;
use Tk;my $mw = MainWindow->new or die 'cannot create Widget';my $types = [['Freemind', '.mm'], ['XML file', '.xml']];my $filename = $mw->getOpenFile(-filetypes=>$types);
print $filename;MainLoop;

运行 perl tk_openfile.pl 

参阅:Perl XML::LibXML by Example — Perl XML::LibXML by Example documentation

http://www.lryc.cn/news/322537.html

相关文章:

  • Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)
  • Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示
  • 代码随想录算法训练营第day53|1143.最长公共子序列 、 1035.不相交的线、 53. 最大子序和 动态规划
  • 【Flutter学习笔记】10.2 组合现有组件
  • C++的vector类(一):vector类的常见操作
  • SpringBoot注解
  • 每日三个JAVA经典面试题(十九)
  • springboot企业级抽奖项目业务一(登录模块)
  • 【Python + Django】启动简单的文本页面
  • Docker——问题解决:服务器端和Windows端IP互通
  • HTTP跨域
  • 用Python的turtle库绘制皮卡丘
  • C语言打印当前时间
  • (一)基于IDEA的JAVA基础4
  • 【Python】复习12:标准库与第三方库
  • CUDA 12介绍
  • 旅游系统-软件与环境
  • AI基础知识(2)--决策树,神经网络
  • 蓝桥杯C++大学B组一个月冲刺记录2024/3/21
  • 由浅到深认识C语言(14):枚举
  • 速盾cdn:cdn节点缓存内容不一致怎么办?
  • 【LAMMPS学习】三、构建LAMMPS(6)在构建中包含软件包
  • apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2
  • 8.2K star!史上最强Web应用防火墙
  • 浅谈RPC的理解
  • JDK发布信息、历史及未来规划
  • 帅帅密码管理系统使用教程
  • 漫谈5种注册中心
  • Vulnhub靶机:Kioptrix_2014
  • Spring Boot整合Spring Security