【Delphi 爬虫库 4】使用封装好的 XML 解析库对 XML 数据进行解析
由于官方提供的TXMLDocument组件并不是特别好用,有着体积大,速度慢,调用不方便等缺点。
这里直接利用封装好的XML 解析库来对Xml数据进行解析与生成。
文章目录
- 1、生成XML文件
- 2、解析XML文件
- 3、生成带注释的XML文件
- 4、删除XML文件节点
1、生成XML文件
procedure TForm1.FormShow(Sender: TObject);
varXml: TXmlVerySimple;BookNode, EntityNode: TXmlNode;
begin// 创建一个新的XML文档Xml := TXmlVerySimple.Create;// 添加一个新的子节点,第一个子节点是DocumentElementXml.AddChild('books');// 在文档根节点下添加一个新的书籍节点BookNode := Xml.DocumentElement.AddChild('book');// 添加一个名为'id'的属性BookNode.Attributes['id'] := 'bk101';// 创建作者和标题的子节点EntityNode := BookNode.AddChild('author');EntityNode.Text := 'Gambardella, Matthew';EntityNode := BookNode.AddChild('title');EntityNode.Text := 'XML Developer''s Guide';/* 更简短的创建作者和标题的子节点BookNode.AddChild('author').Text := 'Gambardella, Matthew';BookNode.AddChild('title').Text := 'XML Developer''s Guide';*//* 更简短的创建作者和标题的子节点(同上)Xml.DocumentElement.AddChild('book').SetAttribute('id', 'bk101').AddChild('author').SetText('Gambardella, Matthew').Parent.AddChild('title').Text := 'XML Developer''s Guide';*/// 将内容写入Memo,前3个字符是Unicode BOMMemo1.Lines.Text := Xml.Text;// 写入到文件Xml.SaveToFile('example1.xml');// 释放资源Xml.Free;
end;
生成XML内容如下:
<?xml version="1.0" encoding="utf-8"?>
<books><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title></book>
</books>
2、解析XML文件
procedure TForm1.FormShow(Sender: TObject);
varXml: TXmlVerySimple;BookNode, EntityNode: TXmlNode;Books: TXmlNodeList;I: Integer;
begin// 首先创建一个XML文档,并保存Xml := TXmlVerySimple.Create;Xml.AddChild('books');for I := 1 to 3 dobeginXml.DocumentElement.AddChild('book').SetAttribute('id', 'bk101-' + IntToStr(I)).AddChild('author').SetText('Gambardella, Matthew').Parent.AddChild('title').Text := 'XML Developer''s Guide Part ' + IntToStr(I);end;Xml.DocumentElement.AddChild('book').SetAttribute('id', 'bk103').AddChild('author').SetText('Corets, Eva').Parent.AddChild('title').Text := 'Maeve Ascendant';Xml.SaveToFile('example4.xml');Xml.Free;// 现在尝试加载它Xml := TXmlVerySimple.Create;Xml.LoadFromFile('example4.xml');// FindNodes 返回一个节点列表Books := Xml.DocumentElement.FindNodes('book');for BookNode in Books dobeginMemo1.Lines.Add('书籍: ' + BookNode.Attributes['id']);// 定位'title'节点并将其内容写入MemoEntityNode := BookNode.Find('title');if Assigned(EntityNode) thenMemo1.Lines.Add('标题: ' + EntityNode.Text);// 定位'author'节点并将其内容写入MemoEntityNode := BookNode.Find('author');if Assigned(EntityNode) thenMemo1.Lines.Add('作者: ' + EntityNode.Text);Memo1.Lines.Add('');end;Books.Free;// 释放资源Xml.Free;
end;
返回:
Book: bk101-1
Title: XML Developer's Guide Part 1
Author: Gambardella, MatthewBook: bk101-2
Title: XML Developer's Guide Part 2
Author: Gambardella, MatthewBook: bk101-3
Title: XML Developer's Guide Part 3
Author: Gambardella, MatthewBook: bk103
Title: Maeve Ascendant
Author: Corets, Eva
3、生成带注释的XML文件
procedure TForm1.FormShow(Sender: TObject);
varXml: TXmlVerySimple;
begin// 首先创建一个XML文档,并保存Xml := TXmlVerySimple.Create;Xml.AddChild('books');// 添加一个新的注释节点,节点名称为空,因为在输出时不使用Xml.DocumentElement.AddChild('', ntComment).Text := ' 这是第一本书 ';// 添加一本书Xml.DocumentElement.AddChild('book').SetAttribute('id', 'bk101').AddChild('author').SetText('Gambardella, Matthew').Parent.AddChild('title').Text := 'XML Developer''s Guide';// 添加一个新的注释节点,节点名称为空,因为在输出时不使用Xml.DocumentElement.AddChild('', ntComment).Text := ' 这是第二本书 ';// 添加一本书Xml.DocumentElement.AddChild('book').SetAttribute('id', 'bk103').AddChild('author').SetText('Corets, Eva').Parent.AddChild('title').Text := 'Maeve Ascendant';// 将内容写入Memo,前3个字符是Unicode BOMMemo1.Lines.Text := Xml.Text;// 写入到文件Xml.SaveToFile('example5.xml');// 释放资源Xml.Free;
end;
返回:
<?xml version="1.0" encoding="utf-8"?>
<books><!-- 这是第一本书 --><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title></book><!-- 这是第二本书 --><book id="bk103"><author>Corets, Eva</author><title>Maeve Ascendant</title></book>
</books>
4、删除XML文件节点
procedure TForm1.FormShow(Sender: TObject);
varXml: TXmlVerySimple;Node: TXmlNode;CommentNodes: TXmlNodeList;
begin// 首先创建一个XML文档,并保存Xml := TXmlVerySimple.Create;Xml.AddChild('books');// 添加一个新的注释节点,节点名称为空,因为在输出时不使用Xml.DocumentElement.AddChild('', ntComment).Text := ' 这是第一本书 ';// 添加一本书Xml.DocumentElement.AddChild('book').SetAttribute('id', 'bk101').AddChild('author').SetText('Gambardella, Matthew').Parent.AddChild('title').Text := 'XML Developer''s Guide';// 添加一个新的注释节点,节点名称为空,因为在输出时不使用Xml.DocumentElement.AddChild('', ntComment).Text := ' 这是第二本书 ';// 添加一本书Xml.DocumentElement.AddChild('book').SetAttribute('id', 'bk103').AddChild('author').SetText('Corets, Eva').Parent.AddChild('title').Text := 'Maeve Ascendant';// 现在删除所有注释节点(位于DocumentElement根的第一级)CommentNodes := Xml.DocumentElement.FindNodes('', [ntComment]);// 要删除一个节点,只需从其父节点中移除它(不要在未从父节点中删除的情况下释放它!)for Node in CommentNodes doNode.Parent.ChildNodes.Remove(Node);CommentNodes.Free;// 将内容写入Memo,前3个字符是Unicode BOMMemo1.Lines.Text := Xml.Text;// 写入到文件Xml.SaveToFile('example6.xml');// 释放资源Xml.Free;
end;
相关文章:
【Delphi 爬虫库 4】使用封装好的 XML 解析库对 XML 数据进行解析
由于官方提供的TXMLDocument组件并不是特别好用,有着体积大,速度慢,调用不方便等缺点。 这里直接利用封装好的XML 解析库来对Xml数据进行解析与生成。 文章目录 1、生成XML文件2、解析XML文件3、生成带注释的XML文件4、删除XML文件节点 1、生…...
Flask简介
Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装 概述 Flask算是小型框架,小到可以称为“微框架”。Flask 非常小,因此你一旦能够熟练使用它,很可能就能读懂它所有的…...
神经网络中的归一化
我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内,以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内,比如[0,1]或者[-1,1],来消除不同特征之间的量纲和取值范围…...
《从Paxos到Zookeeper》——第四、七章:基本概念及原理
目录 第四章 Zookeeper与Paxos 4.1 Zk是什么 4.1.1 Zk特性 4.1.2 Zk基本概念 4.1.2.1 集群角色(Follower, Leader, Observer) 4.1.2.2 数据模型 4.1.2.3 ZNode(数据节点) 4.1.2.4 Session(会话) 4.1.2.5 ACL(Access Control Lists) 4.1.2.6 Watcher(事件…...
网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN
前言 文章主要介绍常见名词以及其在各自领域实现的功能价值。 01 裸纤 裸光纤(裸光纤)由运营商提供,是无中继的光纤线路,仅通过配线架连接。相比传统光纤,裸光纤提供纯粹的物理传输路径,无需额外网…...
MMC设备
MMC(MultiMediaCard)是一种闪存卡标准,用于作为便携式设备上的存储媒介,例如数码相机、智能手机、平板电脑、个人数字助理(PDA)以及其他便携式设备。MMC卡最初是由SanDisk和Siemens AG开发的,并…...
图片浏览器-PicView
一、前言 PicView 是一款适用于 Windows 10 或 11 的快速高效的图像查看器,配备了干净简洁的用户界面,可以在不需要时方便地隐藏。 二、支持类型 它支持广泛的图像文件类型,包括:WEBP、GIF、SVG、PNG、JXL、HEIC、PSD 三、软件特…...
一些零碎小知识
函数递归复习 #define 的头文件包含 #define定义标识符常量 等define其他用法 斐波那契数列 函数栈帧 青蛙跳台问题 汉诺塔问题 字符“0”与0的计算 “0”-“0”0; 最后一次作业题一道 素数 随机数 strand timer rand 水仙花数 变种随鲜花 斐波那契数…...
2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法
文本渲染指令 文本渲染指令-v-html与v-text Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue的模板都是 合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。 在前面,我们一直使用的是字符串插…...
(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型
文章目录 相关资料摘要引言相关工作对比语言图像预训练遥感域专用 CLIP 模型遥感中的多模态 CLIP 启发模型 方法模型算法输入阶段:输出阶段:步骤说明: 第一阶段:通过权重插值修补CLIP将遥感图像模态与自然图像和文本对齐 实验 相关…...
区块链 | 一文了解 NFT 的生态系统(上)
🐶原文: Understanding Security Issues in the NFT Ecosystem 🐶写在前面: 本博客只摘取了原论文的第二、三节。 技术背景知识 在本节中,我们将介绍以太坊生态系统的构建模块,重点关注「NFT,…...
为什么centos官方版不支持arm架构?
为什么centos官方版不支持arm架构? 1、资源限制:CentOS是由社区维护的开源操作系统,其开发和维护需要大量的人力和物力资源。由于ARM架构的设备相对较少,社区资源有限,因此官方版CentOS选择集中精力在x86架构上进行开发…...
awk小尝试2(随手记)
文章目录 需求1解法 需求2解法(3种-grep/sed/awk) 需求1 使用hostname -I创建文件名 echo hostname -I.txt 10.0.0.124 .txt # 需要注意,这里的.txt前有一个空格,需要去掉,不然就是两个文件名解法 echo hostname -I…...
Vue的项目启动指令分析
通过Vue CLI脚手架创建的项目,默认的启动项目方式是 npm run serve 这里的serve是可以修改的。 在创建的项目目录中,找到package.json 双击打开,找到scripts部分 在scripts部分,有一个"serve"键值对,这里的…...
年轻人刮疯了,刮刮乐断货了
年轻人刮疯了 刮刮乐缺货了。 00后彩票店老板陆诗等得有点着急。她的福彩店开在深圳,今年4月才开门营业,但从开业到今天,刮刮乐总共就来了一回货——开业时发的20本。 那之后,刮刮乐就彻底断供了。原本,陆诗想把刮刮…...
25 JavaScript学习:var let const
JavaScript全局变量 JavaScript中全局变量存在多种情况和定义方式,下面详细解释并提供相应的举例: 使用var关键字声明的全局变量: var globalVar "我是全局变量";未使用var关键字声明的变量会成为全局变量(不推荐使用&…...
docker部署的nacos2.2x开启鉴权功能
注意在2.2.0版本之后如果不开启鉴权,那么默认不需要登录就可以访问 所以我们需要手动开启鉴权,nacos启动好以后来到容器内部修改 docker exec -it nacos /bin/shvim conf/application.properties在第34行下面添加 nacos.core.auth.enabledtrue nacos.cor…...
【数据结构与算法】之五道链表进阶面试题详解!
目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表(||) 6、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知…...
vue2实现生成二维码和复制保存图片功能(复制的同时会给图片加文字)
<template><divstyle"display: flex;justify-content: center;align-items: center;width: 100vw;height: 100vh;"><div><!-- 生成二维码按钮和输入二维码的输入框 --><input v-model"url" placeholder"输入链接" ty…...
Redis之字符串类型深入之SDS底层结构
作为一名程序员不可能不知道redis 知道redis不可能不知道redis的字符串 如果你真的熟悉redis不能不知道sds, 我们探究一下redis字符串的底层结构 sds翻译过来就是动态扩容(Simple Dynamic String)、先看一下最早版本redis的sds结构体 struct sdshdr{int len; //记录数组中…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
