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

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...