tinyxml

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
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容