csdn推荐
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 =
""
""
""
"A Midsummer Night's Dream "
"";
XMLDocument doc;
doc.Parse( xml );
//可能需要注意这个地方读取文件以后也可以直接使用
XMLElement* titleElement = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );
const char* title = titleElement->GetText();
printf( "Name of play (1): %sn", title );
XMLText* textNode = titleElement->FirstChild()->ToText();
title = textNode->Value();
printf( "Name of play (2): %sn", title );
return doc.ErrorID();
}
最后在编译的时候记得gcc 进行联合编译,要不然的话不能知道相关的在hpp中的函数定义在什么位置。
然后就可以借助于regex函数借助于正则表达式处理字符串文件
可以从c++参考文档中正则表达式获得
#include
#include
#include
#include
int main()
{
std::string text = "Quick brown fox";
std::regex vowel_re("a|e|i|o|u");
// 写结果到输出迭代器
std::regex_replace(std::ostreambuf_iterator(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
#include
#include
#include
#include
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! " <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 << "" << endl;
ofs << " " <<"" << cnt++ << "" << endl;
RssItem rss;
rss = _rss.front();
regex pattern("");
string replacement = "";
string result = regex_replace(rss.title, pattern, replacement);
ofs << " " << "" << result << " " <<endl;
result = regex_replace(rss.link, pattern, replacement);
ofs << " " << "" << result << "" <<endl;
result = regex_replace(rss.description, pattern, replacement);
ofs << " " << "" << result << "" <<endl;
result = regex_replace(rss.content, pattern, replacement);
ofs << " " << "" << result << "" <<endl;
_rss.pop_back();
}
ofs.close();
}//输出
private:
vector _rss;
};
int main()
{
RssReader rs(10);
rs.parseRss("feed.txt");
rs.dump("content.txt");
return 0;
}
文章来源:https://blog.csdn.net/weixin_61057535/article/details/139824201
微信扫描下方的二维码阅读本文
© 版权声明
THE END
暂无评论内容