当前位置: 首页 > 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; //记录数组中…...

Cesium 3dTileset 支持 uv 和 纹理贴图

原理: 使用自定义shader实现uv自动计算 贴图效果: uv效果:...

C++可变参数模板中的省略号

看可变参数模板代码时常会遇到省略号的使用&#xff0c;这类奇特的“...”出现位置还不固定&#xff0c;容易引起困惑。C最近一直不用都快废了&#xff0c;在此想对省略号的使用做个简单归纳以提醒自己。可变参数模板以两种方式使用省略号。 在参数名称的左侧&#xff0c;表示“…...

uni-ui 使用uni-icons有些图标显示不出来,如down,up图标

问题描述 我使用的是uni创建时勾选的uni-ui模板&#xff0c;一次偶然机会发现down图标显示不出&#xff0c;left&#xff0c;right等其他图标又可以。 最后发现使用uni-icons不是最新版本导致的&#xff0c;使用模板生成的icons是1.3.5版本&#xff0c;我在插件市场找到的是2.0…...

动态增删表格

期望目标&#xff1a;实现一个能通过按钮来动态增加表格栏&#xff0c;每次能添加一行&#xff0c;每行末尾有一个删减按钮。 <el-button type"text" class"primary"click"addMember()">添加</el-button> <el-table:data"m…...

Java-(乘法表之后)增强for循环

这里我们先做个了解&#xff0c;之后我会在数组中进行详细介绍Java5引入了一种主要用于数组或集合的增强型for循环Java增强型for循环语法格式如下 For(声明语句&#xff1a;表达式&#xff09;{ //代码语句 } 声明语句&#xff1a;声明新的局部变量&#xff0c;该变量的类型…...

Celery(分布式任务队列)入门学习笔记

Celery 的简单介绍 用 Celery 官方的介绍&#xff1a;它是一个分布式任务队列; 简单&#xff0c;灵活&#xff0c;可靠的处理大量消息的分布式系统; 它专注于实时处理&#xff0c;并支持任务调度。 Celery 如果使用 RabbitMQ 作为消息系统的话&#xff0c;整个应用体系就是下…...

【网络】tcp协议如何保证可靠性

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输层协议&#xff0c;为网络通信提供了可靠性和连接稳定性。本文将详细介绍 TCP 协议如何保证数据的可靠传输和连接的稳定性&#xff0c;并分析其优缺点。 可靠性保证 序号和确认机制&…...

select,poll,epoll

在 Linux Socket 服务器短编程时&#xff0c;为了处理大量客户的连接请求&#xff0c;需要使用非阻塞I/O和复用&#xff0c;select&#xff0c;poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…...

【48天笔试强训】day18

题目1 描述 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子都…...

链表经典面试题01

目录 引言 面试题01:返回倒数第k个节点 题目描述: 思路分析: 代码展示: 面试题02:链表的回文结构 题目描述: 描述 思路分析: 代码展示: 面试题03:相交链表 题目描述: 思路分析: 代码展示: 小结: 引言 这次的题均来自力扣和牛客有关链表的经典面试题,代码只会展示…...

学技巧网站制作/网页设计需要学什么软件

开源GIS浅谈 【转】 http://blog.csdn.net/happyduoduo1/article/details/51773850 谈到GIS软件&#xff0c;首先让我们想到的是GIS界的龙头大哥ESRI公司旗下的ArcGIS产品&#xff0c;从最初接触的version 9.2到如今的version 10.4&#xff0c;其发展可谓风生水起。MapInfo软…...

临沂网站制作网站/莆田网站建设优化

本文实例为大家分享了Struts2框架实现文件上传的方法&#xff0c;供大家参考&#xff0c;具体内容如下struts2的配置过程(1)在项目中加入jar包(2)web.xml中filter(过滤器)的配置xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLS…...

品牌茶业都在哪些网站做宣传/网络营销方法有几种类型

一、jumpserver的启动 12Jumpserver的启动和重启[roottest-vm001 install]# /opt/jumpserver/service.sh start/restart二、按照Jumpserver部署过程结尾的账号信息&#xff08;admin/wangadmin123&#xff09;登陆Jumpserver的web界面 修改admin超级管理员的密码 只修改admin的…...

国内阿里网站建设/百度免费推广登录入口

变量范围变量的范围即它定义的上下文背景&#xff08;译者:说白了&#xff0c;也就是它的生效范围&#xff09;。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。范例: <?php$a 1;include "b.inc";?> …...

贵阳网站制作/沈阳seo搜索引擎

Python 公共代码配置有些函数或变量是多个积木共用的&#xff0c;我们将其称为公共函数或变量。我们可以通过配置 Python 公共代码来统一定义和修改这些函数或变量。配置 Python 公共代码的方法有多种&#xff0c;本文将介绍其中三种&#xff1a;在帽子积木中添加转码的积木通常…...

吴桥做网站价格/舆情网站

将新插入磁盘的Frimware state修改为unconfig good 找到unconfig bad的磁盘 # ./MegaCli64 -pdlist -a0 Adapter #0 Enclosure Device ID: 252 Slot Number: 0 Drives position: DiskGroup: 0, Span: 0, Arm: 0 Enclosure position: N/A Device Id: 2 WWN: 5000C50098BAA7…...