HtmlRender - c++实现的html生成类

HtmlRender

CppTinParser/render.hpp中定义和实现。

使用c++实现的简易Html编辑类。

简介

目前,c++有几个Html解析器,而少见便捷规范的html生成器,HtmlRender则提供了一个简单的、规范的html内容生成器。用c++实现html内容生成器,并不是简单的字符串拼接,这样会导致代码编写不规范、易读性下降,而且无法应对复杂html生成任务。HtmlRender借鉴了python的第三方html编写库——dominate


使用接口

初始化

HtmlRender* item = HtmlRender(string tag, string content, map<string,string> kws, bool onetag=false, bool pre=false)
//tag 标签名称,如果为空字符串,则在生成时直接产生content,不添加标记
//content 标签内容
//kws 标签参数
//onetag 是否为单标签,比如<br>, <hr>等
//pre 是否显示为原文本

生成html文本

string result = HtmlRender.render()

该函数将生成并返回该HtmlRender所包含的html文本内容。一般应只用tag = "html"HtmlRender使用该函数,以此来实现完整的html文本。当然,任意HtmlRender实例均可,单标签也可使用该函数,但是生成内容将大概率出现错误。

添加子元素

为了方便操作,HtmlRender使用list作为容器来存取子元素指针,这里的子元素同样是HtmlRender。具体增加代码如下:

HtmlRender* subitem = new HtmlRender(...)
item.add(subitem)

如果父元素本身就是通过new创建,则使用如下代码:

item->add(subitem)

设置标签元素内容和参数

设置内容:

item.configcnt(string content)

设置参数:

item.configkws(map<string, string> kws)

获取父元素指针

除了顶级元素,任何一个标签元素在被使用add方法后,都会有明确的父元素。

通过如下代码获取父元素指针:

HtmlRender* p_item = subitem->parent()
//p_item == &item

获取子元素指针列表

如果一个元素使用了add方法,则必然含有子元素。

使用如下代码获取子元素指针列表

list<HtmlRender*> children = item.children()

实现原理

添加子元素

获取子元素指针,在子元素指针列表中添加该指针。

void HtmlRender::add(HtmlRender* item) {
   
    //添加html内容
    this->htmlcontent.push_back(item);
    item->_parent = this;
}

渲染

首先生成元素自身标签、参数、内容,然后遍历子元素指针列表,获取所有子元素以及多级子元素的渲染生成内容,最后加上自身结束标签(如果有的话)。

string HtmlRender::render() {
   
    //渲染为html文本
    if (this->tag == ""){
   
        return this->content;
    }
    string htmltext = "<" + this->tag;
    for (auto &kw : this->kws) {
   
        htmltext += " " + kw.first + "=\"" + kw.second + "\"";
    }
    htmltext += ">";

    htmltext += this->content;
    
    for (auto item = this->htmlcontent.begin(); item != this->htmlcontent.end(); ++item) {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值