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

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下载相关的软件包&#xff0c;其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp&#xff0c;tinyxml12.h&#xff0c;rss网页xml文件&#xff0c;还有就是官方给的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实现的商品列表网页

一、商品列表效果如下 二、代码&#xff1b; vue实现的商品列表网页 &#xff0c; 图片在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模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…...

通信系统概述

1.定义 通信系统&#xff08;也称为通信网络&#xff09;是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展&#xff…...

http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解

文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞&#xff08;Head-of-Line Blocking&#xff09;1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间&#xff1a;1991年 特点&#xff1a; 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容&#xff0…...

Hadoop 面试题(四)

1. 简述Hadoop节点的动态上线下线的大概操作 &#xff1f; 在Hadoop集群中&#xff0c;节点的动态上下线指的是在不停止整个集群服务的情况下&#xff0c;添加或移除节点。这种能力对于维护和扩展集群非常重要。以下是Hadoop节点动态上线下线的大概操作步骤&#xff1a; 动态…...

绽放光彩的小程序 UI 风格

绽放光彩的小程序 UI 风格...

电脑文件夹怎么加密?文件夹加密的5种方法

在数字化时代&#xff0c;信息安全显得尤为重要。对于个人电脑用户来说&#xff0c;文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法&#xff0c;帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一&#xff1a;利用Windows系统自带的…...

异步复位同步释放

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 题目描述&#xff1a; 请使用异步复位同步释放来将输入数据a存储到寄存器中&#xff0c;并画图说明异步复位同步释放的机制原理 信号示意图&#xff1a; clk为时钟 rst_n为低电平复位 d信号输入…...

JupyterLab使用指南(七):JupyterLab使用 LaTeX 生成数学公式

在 JupyterLab 中&#xff0c;可以使用 LaTeX 语法生成复杂的数学公式。JupyterLab 内置对 LaTeX 的支持&#xff0c;使得我们可以方便地在 notebook 中编写和展示数学公式。以下是详细的步骤和示例。 1. 使用 LaTeX 生成数学公式 LaTeX 是一种专门用于排版数学公式的语言。J…...

docker 环境部署

1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号&#xff0c;这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包&#xff0c;下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …...

Spring中的ContextPath总结

Spring中的ContextPath总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. ContextPath的概念 在Spring中&#xff0c;ContextPath是指Web应用程序的上下文…...

C++设计模式——Composite组合模式

一&#xff0c;组合模式简介 真实世界中&#xff0c;像企业组织、文档、图形软件界面等案例&#xff0c;它们在结构上都是分层次的。将系统分层次的方式使得统一管理和添加不同子模块变得容易&#xff0c;在软件开发中&#xff0c;组合模式的设计思想和它们类似。 组合模式是…...

Android提供的LruCache类简介(1)

* If your cached values hold resources that need to be explicitly released, * override {link #entryRemoved}. * 如果你cache的某个值需要明确释放&#xff0c;重写entryRemoved() * If a cache miss should be computed on demand for the corresponding keys, * ov…...

【分布式系列】分布式锁timeout了怎么办?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

System.getProperty()方法总结

System.getProperty()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;System.getProperty()方法是Java中用于获取系统属性的方法之一。它允许我们访问J…...

大型语言模型在AMD GPU上的推理优化

Large language model inference optimizations on AMD GPUs — ROCm Blogs 大型语言模型&#xff08;LLMs&#xff09;已经改变了自然语言处理和理解&#xff0c;促进了在多个领域中的众多人工智能应用。LLMs在包括AI助手、聊天机器人、编程、游戏、学习、搜索和推荐系统在内的…...

用STM32G431RBT6复刻一个简易示波器+信号发生器:蓝桥杯嵌入式外设综合应用实战

基于STM32G431RBT6的嵌入式示波器与信号发生器开发实战 在嵌入式系统开发领域&#xff0c;将理论知识转化为实际应用能力是每个工程师成长的必经之路。本文将带你使用STM32G431RBT6开发板&#xff0c;从零开始构建一个兼具示波器和信号发生器功能的综合系统。这个项目不仅能够…...

VS2015安装后找不到控制台项目?别急,你可能只是开错了Blend

VS2015安装后找不到控制台项目&#xff1f;可能是你开错了Blend 刚接触Visual Studio 2015的开发者经常会遇到一个令人困惑的问题&#xff1a;明明安装了VS2015&#xff0c;却找不到Win32控制台应用程序的创建选项。这往往不是因为安装不完整&#xff0c;而是因为误打开了Blend…...

终极免费Redis可视化工具:Windows版RedisDesktopManager完全指南

终极免费Redis可视化工具&#xff1a;Windows版RedisDesktopManager完全指南 【免费下载链接】RedisDesktopManager-Windows RedisDesktopManager Windows版本 项目地址: https://gitcode.com/gh_mirrors/re/RedisDesktopManager-Windows 你是否厌倦了在命令行中操作Red…...

你的STM32调试信息用对了吗?深入对比.axf文件与addr2line.exe的配合之道

STM32调试进阶&#xff1a;解密.axf文件与addr2line的黄金组合 调试嵌入式系统时&#xff0c;最令人沮丧的莫过于设备突然崩溃&#xff0c;而你却对问题源头一无所知。作为一名长期与STM32打交道的开发者&#xff0c;我经历过无数次这样的时刻&#xff0c;直到真正理解了调试信…...

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的版本匹配(附最新镜像源)

别再为版本号头疼了&#xff01;手把手教你搞定Windows上ChromeDriver与Chrome的版本匹配 每次启动Selenium脚本时看到SessionNotCreatedException报错&#xff0c;就像在高速公路上突然爆胎——明明昨天还能正常运行的自动化测试&#xff0c;今天就因为Chrome自动更新而彻底罢…...

手把手教你给咪咕盒子MGV2000刷机,S905L3芯片也能焕发新生(保姆级图文教程)

让老旧咪咕盒子重获新生的全流程刷机指南 前言&#xff1a;为什么我们需要给电视盒子刷机&#xff1f; 家里那台运营商赠送的咪咕MGV2000电视盒子&#xff0c;是不是已经让你忍无可忍了&#xff1f;开机慢得像老牛拉车&#xff0c;操作卡顿到让人抓狂&#xff0c;内置应用一大…...

N_m3u8DL-RE:跨平台流媒体下载终极指南

N_m3u8DL-RE&#xff1a;跨平台流媒体下载终极指南 【免费下载链接】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正式版系统源码_全开源_安全加密传输

概述 在数字化信息交流日益频繁的今天&#xff0c;如何安全、私密地传输敏感数据&#xff08;如商业机密、登录凭证、个人隐私&#xff09;已成为企业和个人用户共同面临的严峻挑战。传统的即时通讯工具往往存在聊天记录留存、云端备份等安全隐患&#xff0c;难以满足“阅后即…...

从虚拟机到私有云:手把手教你用VirtualBox+CentOS 7搭建个人OpenStack学习环境

从虚拟机到私有云&#xff1a;手把手教你用VirtualBoxCentOS 7搭建个人OpenStack学习环境 在个人电脑上搭建OpenStack环境听起来像是企业级IT工程师的专属领域&#xff0c;但事实上&#xff0c;借助VirtualBox这样的免费虚拟化工具和CentOS 7的稳定性&#xff0c;任何人都可以在…...