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

【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&apos;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&apos;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组件并不是特别好用&#xff0c;有着体积大&#xff0c;速度慢&#xff0c;调用不方便等缺点。 这里直接利用封装好的XML 解析库来对Xml数据进行解析与生成。 文章目录 1、生成XML文件2、解析XML文件3、生成带注释的XML文件4、删除XML文件节点 1、生…...

Flask简介

Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装 概述 Flask算是小型框架&#xff0c;小到可以称为“微框架”。Flask 非常小&#xff0c;因此你一旦能够熟练使用它&#xff0c;很可能就能读懂它所有的…...

神经网络中的归一化

我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内&#xff0c;以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内&#xff0c;比如[0,1]或者[-1,1]&#xff0c;来消除不同特征之间的量纲和取值范围…...

《从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&#xff08;Access Control Lists&#xff09; 4.1.2.6 Watcher(事件…...

网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN

前言 文章主要介绍常见名词以及其在各自领域实现的功能价值。 01 裸纤 裸光纤&#xff08;裸光纤&#xff09;由运营商提供&#xff0c;是无中继的光纤线路&#xff0c;仅通过配线架连接。相比传统光纤&#xff0c;裸光纤提供纯粹的物理传输路径&#xff0c;无需额外网…...

MMC设备

MMC&#xff08;MultiMediaCard&#xff09;是一种闪存卡标准&#xff0c;用于作为便携式设备上的存储媒介&#xff0c;例如数码相机、智能手机、平板电脑、个人数字助理&#xff08;PDA&#xff09;以及其他便携式设备。MMC卡最初是由SanDisk和Siemens AG开发的&#xff0c;并…...

图片浏览器-PicView

一、前言 PicView 是一款适用于 Windows 10 或 11 的快速高效的图像查看器&#xff0c;配备了干净简洁的用户界面&#xff0c;可以在不需要时方便地隐藏。 二、支持类型 它支持广泛的图像文件类型&#xff0c;包括&#xff1a;WEBP、GIF、SVG、PNG、JXL、HEIC、PSD 三、软件特…...

一些零碎小知识

函数递归复习 #define 的头文件包含 #define定义标识符常量 等define其他用法 斐波那契数列 函数栈帧 青蛙跳台问题 汉诺塔问题 字符“0”与0的计算 “0”-“0”0&#xff1b; 最后一次作业题一道 素数 随机数 strand timer rand 水仙花数 变种随鲜花 斐波那契数…...

2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法

文本渲染指令 文本渲染指令-v-html与v-text Vue使用了基于HTML的模板语法&#xff0c;允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue的模板都是 合法的HTML&#xff0c;所以能被遵循规范的浏览器和HTML解析器解析。 在前面&#xff0c;我们一直使用的是字符串插…...

(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型

文章目录 相关资料摘要引言相关工作对比语言图像预训练遥感域专用 CLIP 模型遥感中的多模态 CLIP 启发模型 方法模型算法输入阶段&#xff1a;输出阶段&#xff1a;步骤说明&#xff1a; 第一阶段&#xff1a;通过权重插值修补CLIP将遥感图像模态与自然图像和文本对齐 实验 相关…...

区块链 | 一文了解 NFT 的生态系统(上)

&#x1f436;原文&#xff1a; Understanding Security Issues in the NFT Ecosystem &#x1f436;写在前面&#xff1a; 本博客只摘取了原论文的第二、三节。 技术背景知识 在本节中&#xff0c;我们将介绍以太坊生态系统的构建模块&#xff0c;重点关注「NFT&#xff0c;…...

为什么centos官方版不支持arm架构?

为什么centos官方版不支持arm架构&#xff1f; 1、资源限制&#xff1a;CentOS是由社区维护的开源操作系统&#xff0c;其开发和维护需要大量的人力和物力资源。由于ARM架构的设备相对较少&#xff0c;社区资源有限&#xff0c;因此官方版CentOS选择集中精力在x86架构上进行开发…...

awk小尝试2(随手记)

文章目录 需求1解法 需求2解法&#xff08;3种-grep/sed/awk&#xff09; 需求1 使用hostname -I创建文件名 echo hostname -I.txt 10.0.0.124 .txt # 需要注意&#xff0c;这里的.txt前有一个空格&#xff0c;需要去掉&#xff0c;不然就是两个文件名解法 echo hostname -I…...

Vue的项目启动指令分析

通过Vue CLI脚手架创建的项目&#xff0c;默认的启动项目方式是 npm run serve 这里的serve是可以修改的。 在创建的项目目录中&#xff0c;找到package.json 双击打开&#xff0c;找到scripts部分 在scripts部分&#xff0c;有一个"serve"键值对&#xff0c;这里的…...

年轻人刮疯了,刮刮乐断货了

年轻人刮疯了 刮刮乐缺货了。 00后彩票店老板陆诗等得有点着急。她的福彩店开在深圳&#xff0c;今年4月才开门营业&#xff0c;但从开业到今天&#xff0c;刮刮乐总共就来了一回货——开业时发的20本。 那之后&#xff0c;刮刮乐就彻底断供了。原本&#xff0c;陆诗想把刮刮…...

25 JavaScript学习:var let const

JavaScript全局变量 JavaScript中全局变量存在多种情况和定义方式&#xff0c;下面详细解释并提供相应的举例&#xff1a; 使用var关键字声明的全局变量&#xff1a; var globalVar "我是全局变量";未使用var关键字声明的变量会成为全局变量&#xff08;不推荐使用&…...

docker部署的nacos2.2x开启鉴权功能

注意在2.2.0版本之后如果不开启鉴权&#xff0c;那么默认不需要登录就可以访问 所以我们需要手动开启鉴权&#xff0c;nacos启动好以后来到容器内部修改 docker exec -it nacos /bin/shvim conf/application.properties在第34行下面添加 nacos.core.auth.enabledtrue nacos.cor…...

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表&#xff08;||&#xff09; 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知…...

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; //记录数组中…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...