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): %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
- #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<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
- #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! " << 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 << "
" << endl; - ofs << " " <<"
" << cnt++ << "" << endl; - RssItem rss;
- rss = _rss.front();
-
- regex pattern("<.*?>");
- string replacement = "";
- string result = regex_replace(rss.title, pattern, replacement);
- ofs << " " << "
" << result << "" <-
- result = regex_replace(rss.link, pattern, replacement);
- ofs << " " << "" << result << "" <
-
- result = regex_replace(rss.description, pattern, replacement);
- ofs << " " << "
" << result << "" <-
- result = regex_replace(rss.content, pattern, replacement);
- ofs << " " << "
" << result << "" <- _rss.pop_back();
- }
- ofs.close();
- }//输出
- private:
- vector
_rss; - };
-
-
-
- int main()
- {
- RssReader rs(10);
- rs.parseRss("feed.txt");
- rs.dump("content.txt");
- return 0;
- }
-
-
相关阅读:
修改禅道启动因mysql端口被占用问题
Java Double byteValue()方法具有什么功能呢?
【问题之书】
分布式运用之企业级日志ELFK+logstash的过滤模块
【Opencv】-----倾斜图片转正
Fiddler收费没得用?这款抓包神器 Github star 过万,一个字:香
RabbitMQ之死信队列
Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志
序列化(三)JSON
43%非常看好TypeScript…解读“2022前端开发者现状报告”
-
原文地址:https://blog.csdn.net/weixin_61057535/article/details/139824201