tinyxml
github下载相关的软件包,其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp,tinyxml12.h,rss网页xml文件,还有就是官方给的test文件tinyxmltest.cpp。
example1就是提供一个打开文件的方式
int example_1()
{XMLDocument doc;doc.LoadFile( "resources/dream.xml" );return doc.ErrorID();
}
example3就是处理一个字符串
int example_3()
{static const char* xml ="<?xml version=\"1.0\"?>""<!DOCTYPE PLAY SYSTEM \"play.dtd\">""<PLAY>""<TITLE>A Midsummer Night's Dream</TITLE>""</PLAY>";XMLDocument doc;doc.Parse( xml );//可能需要注意这个地方读取文件以后也可以直接使用XMLElement* titleElement = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );const char* title = titleElement->GetText();printf( "Name of play (1): %s\n", title );XMLText* textNode = titleElement->FirstChild()->ToText();title = textNode->Value();printf( "Name of play (2): %s\n", title );return doc.ErrorID();
}
最后在编译的时候记得gcc test.cc tinyxml.cc 进行联合编译,要不然的话不能知道相关的在hpp中的函数定义在什么位置。
然后就可以借助于regex函数借助于正则表达式处理字符串文件
可以从c++参考文档中正则表达式获得
#include <iostream>
#include <iterator>
#include <regex>
#include <string>int main()
{std::string text = "Quick brown fox";std::regex vowel_re("a|e|i|o|u");// 写结果到输出迭代器std::regex_replace(std::ostreambuf_iterator<char>(std::cout),text.begin(), text.end(), vowel_re, "*");// 构造保有结果的字符串std::cout << '\n' << std::regex_replace(text, vowel_re, "[$&]") << '\n';
}//输出结果
Q**ck br*wn f*x
Q[u][i]ck br[o]wn f[o]x
当然在下面的文档中是通过gpt获得的一种替换方法
#include "tinyxml2.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <regex>
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::ofstream;
using std::regex;
using tinyxml2::XMLDocument;
using tinyxml2::XMLElement;
using tinyxml2::XMLText;struct RssItem
{string title;string link;string description;string content;
};class RssReader
{
public:RssReader(int size){_rss.reserve(size);}//使用string类型也可以接收char*类型//如果使用char*类型的不能接收string类型int parseRss(const char * filename){XMLDocument doc;if(doc.LoadFile(filename) != tinyxml2::XML_SUCCESS){//实际上这是一个enum定义数值是0,所以只需要返回值不为0的时候就可以cout << "doc open error! " << endl;return 1;}for (tinyxml2::XMLElement* titleElement = doc.FirstChildElement("rss")>FirstChildElement("channel")->FirstChildElement("item"); titleElement; titleElement = titleElement->NextSiblingElement("item")) {//这个地方主要是用到nextsibingElement用来访问下一个节点struct RssItem rss;//获取title内容XMLElement * element = titleElement->FirstChildElement("title");if(element){const char* title = element->GetText();rss.title = title;}element = titleElement->FirstChildElement("link");if(element){const char * link = element->GetText();rss.link = link;}element = titleElement->FirstChildElement("description");if(element){const char * description= element->GetText();rss.description = description;}element = titleElement->FirstChildElement("content:encoded");if(element){const char * content= element->GetText();rss.content = content;}_rss.push_back(rss);}//解析return 0;}void dump(const string & filename){ofstream ofs(filename.c_str());int cnt = 1;while(!_rss.empty()){ofs << "<doc>" << endl;ofs << " " <<"<docid>" << cnt++ << "</docid>" << endl;RssItem rss;rss = _rss.front();regex pattern("<.*?>");string replacement = "";string result = regex_replace(rss.title, pattern, replacement);ofs << " " << "<title>" << result << "</title>" <<endl;result = regex_replace(rss.link, pattern, replacement);ofs << " " << "<link>" << result << "</link>" <<endl;result = regex_replace(rss.description, pattern, replacement);ofs << " " << "<description>" << result << "</description>" <<endl;result = regex_replace(rss.content, pattern, replacement);ofs << " " << "<content>" << result << "</content>" <<endl;_rss.pop_back();}ofs.close();}//输出
private:vector<RssItem> _rss;
}; int main()
{RssReader rs(10);rs.parseRss("feed.txt");rs.dump("content.txt");return 0;
}
相关文章:
tinyxml
github下载相关的软件包,其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp,tinyxml12.h,rss网页xml文件,还有就是官方给的test文件tinyxmltest.cpp。 example1就是提供一个打开文件的方式 int example_1() {XMLDocument …...
Docker(三)-Docker常用命令
1.run run命令执行流程:2.帮助启动类命令 2.1 启动docker systemctl start docker2.2 停止docker systemctl stop docker2.3 重启docker systemctl restart docker2.4查看docker状态 systemctl status docker2.5开机启动 systemctl enable docker2.6查看docker概要信息 …...
[MRCTF2020]PixelShooter
一个apk文件 jeb打开发现是apk文件 apk游戏逆向必须知道的知识: 一般关键数据在 Assets/bin/data/managed/assembly-csharp.dll这个文件里面 我不知道jeb为什么这里我没有 apk是个压缩包 直接解压 这个文件解压也可以发现flag {Unity_1S_Fun_233}...
vue实现的商品列表网页
一、商品列表效果如下 二、代码; vue实现的商品列表网页 , 图片在vue项目的Public文件夹里的 imgs中 <template><div class"common-layout"><!-- el-container:外层容器。 当子元素中包含 <el-header> 或 <el-foo…...
【泛微系统】e-cology非标配功能概览
关于泛微非标功能的功能编号、功能名称及支持版本 编号名称支持版本001考勤功能4.500.0124-9.00+KB900190206002短信通用接口5.000.0327+KB50001003 及以上版本004计划任务接口5.0+KB50001003及以上版本005集成登录接口6.0及以上版本006流程中自定义浏览框5.0+KB50001003及以上…...
Python基础教程(二十八):pip模块
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝Ὁ…...
通信系统概述
1.定义 通信系统(也称为通信网络)是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展ÿ…...
http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解
文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞(Head-of-Line Blocking)1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间:1991年 特点: 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容࿰…...
Hadoop 面试题(四)
1. 简述Hadoop节点的动态上线下线的大概操作 ? 在Hadoop集群中,节点的动态上下线指的是在不停止整个集群服务的情况下,添加或移除节点。这种能力对于维护和扩展集群非常重要。以下是Hadoop节点动态上线下线的大概操作步骤: 动态…...
绽放光彩的小程序 UI 风格
绽放光彩的小程序 UI 风格...
电脑文件夹怎么加密?文件夹加密的5种方法
在数字化时代,信息安全显得尤为重要。对于个人电脑用户来说,文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法,帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一:利用Windows系统自带的…...
异步复位同步释放
目录 描述 输入描述: 输出描述: 参考代码 描述 题目描述: 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图: clk为时钟 rst_n为低电平复位 d信号输入…...
JupyterLab使用指南(七):JupyterLab使用 LaTeX 生成数学公式
在 JupyterLab 中,可以使用 LaTeX 语法生成复杂的数学公式。JupyterLab 内置对 LaTeX 的支持,使得我们可以方便地在 notebook 中编写和展示数学公式。以下是详细的步骤和示例。 1. 使用 LaTeX 生成数学公式 LaTeX 是一种专门用于排版数学公式的语言。J…...
docker 环境部署
1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号,这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包,下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …...
Spring中的ContextPath总结
Spring中的ContextPath总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. ContextPath的概念 在Spring中,ContextPath是指Web应用程序的上下文…...
C++设计模式——Composite组合模式
一,组合模式简介 真实世界中,像企业组织、文档、图形软件界面等案例,它们在结构上都是分层次的。将系统分层次的方式使得统一管理和添加不同子模块变得容易,在软件开发中,组合模式的设计思想和它们类似。 组合模式是…...
Android提供的LruCache类简介(1)
* If your cached values hold resources that need to be explicitly released, * override {link #entryRemoved}. * 如果你cache的某个值需要明确释放,重写entryRemoved() * If a cache miss should be computed on demand for the corresponding keys, * ov…...
【分布式系列】分布式锁timeout了怎么办?
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
System.getProperty()方法总结
System.getProperty()方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!System.getProperty()方法是Java中用于获取系统属性的方法之一。它允许我们访问J…...
大型语言模型在AMD GPU上的推理优化
Large language model inference optimizations on AMD GPUs — ROCm Blogs 大型语言模型(LLMs)已经改变了自然语言处理和理解,促进了在多个领域中的众多人工智能应用。LLMs在包括AI助手、聊天机器人、编程、游戏、学习、搜索和推荐系统在内的…...
用STM32G431RBT6复刻一个简易示波器+信号发生器:蓝桥杯嵌入式外设综合应用实战
基于STM32G431RBT6的嵌入式示波器与信号发生器开发实战 在嵌入式系统开发领域,将理论知识转化为实际应用能力是每个工程师成长的必经之路。本文将带你使用STM32G431RBT6开发板,从零开始构建一个兼具示波器和信号发生器功能的综合系统。这个项目不仅能够…...
VS2015安装后找不到控制台项目?别急,你可能只是开错了Blend
VS2015安装后找不到控制台项目?可能是你开错了Blend 刚接触Visual Studio 2015的开发者经常会遇到一个令人困惑的问题:明明安装了VS2015,却找不到Win32控制台应用程序的创建选项。这往往不是因为安装不完整,而是因为误打开了Blend…...
终极免费Redis可视化工具:Windows版RedisDesktopManager完全指南
终极免费Redis可视化工具:Windows版RedisDesktopManager完全指南 【免费下载链接】RedisDesktopManager-Windows RedisDesktopManager Windows版本 项目地址: https://gitcode.com/gh_mirrors/re/RedisDesktopManager-Windows 你是否厌倦了在命令行中操作Red…...
你的STM32调试信息用对了吗?深入对比.axf文件与addr2line.exe的配合之道
STM32调试进阶:解密.axf文件与addr2line的黄金组合 调试嵌入式系统时,最令人沮丧的莫过于设备突然崩溃,而你却对问题源头一无所知。作为一名长期与STM32打交道的开发者,我经历过无数次这样的时刻,直到真正理解了调试信…...
python系列【仅供参考】:mongo4.0.0 加用户认证 motor和pymongo的auth连接
mongo4.0.0 加用户认证 && motor和pymongo的auth连接 mongo4.0.0 加用户认证 摘要 一. 数据库版本 二. 为mongo 添加用户认证 1. 创建超级用户 3. 开启auth 4.重启mongo 5. 添加库用户 三.验证 四.pymongo,motor连接 摘要 正文 mongo4.0.0 加用户认证 摘要 本文介绍…...
别再为版本号头疼了!手把手教你搞定Windows上ChromeDriver与Chrome的版本匹配(附最新镜像源)
别再为版本号头疼了!手把手教你搞定Windows上ChromeDriver与Chrome的版本匹配 每次启动Selenium脚本时看到SessionNotCreatedException报错,就像在高速公路上突然爆胎——明明昨天还能正常运行的自动化测试,今天就因为Chrome自动更新而彻底罢…...
手把手教你给咪咕盒子MGV2000刷机,S905L3芯片也能焕发新生(保姆级图文教程)
让老旧咪咕盒子重获新生的全流程刷机指南 前言:为什么我们需要给电视盒子刷机? 家里那台运营商赠送的咪咕MGV2000电视盒子,是不是已经让你忍无可忍了?开机慢得像老牛拉车,操作卡顿到让人抓狂,内置应用一大…...
N_m3u8DL-RE:跨平台流媒体下载终极指南
N_m3u8DL-RE:跨平台流媒体下载终极指南 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 在当今数字时…...
全新UI 阅后即焚V2正式版系统源码_全开源_安全加密传输
概述 在数字化信息交流日益频繁的今天,如何安全、私密地传输敏感数据(如商业机密、登录凭证、个人隐私)已成为企业和个人用户共同面临的严峻挑战。传统的即时通讯工具往往存在聊天记录留存、云端备份等安全隐患,难以满足“阅后即…...
从虚拟机到私有云:手把手教你用VirtualBox+CentOS 7搭建个人OpenStack学习环境
从虚拟机到私有云:手把手教你用VirtualBoxCentOS 7搭建个人OpenStack学习环境 在个人电脑上搭建OpenStack环境听起来像是企业级IT工程师的专属领域,但事实上,借助VirtualBox这样的免费虚拟化工具和CentOS 7的稳定性,任何人都可以在…...
