将数字(double / float)作为属性添加到R​​apidXML节点

时间:2011-01-03 09:36:29

标签: c++ xml memory-management rapidxml

我是RapidXML的新手。我想构建一个Xml文档并将其打印到文件中。一切正常,但我不确定我是否正确地完成了这个过程的一部分:

将属性添加到双精度节点。

我正在使用std c ++的东西:

double value = 1.0;
std::ostringstream strs;
strs << value ;
std::string str = strs.str();
char* numBuff =  doc.allocate_string(str.c_str());
xml_attribute<> *attr = doc.allocate_attribute("name",numBuff);
nodeRef->append_attribute(attr);

有更多的elegnat /更快的方式吗?像(愿意思考):

double value = 1.0;
char* numBuff =  doc.allocate_string_from_value(value);
xml_attribute<> *attr = doc.allocate_attribute("name",numBuff);

我需要将大量的双打保存到我的xml文件中,因此性能是我关注的主要问题。

问候, 奥利弗

2 个答案:

答案 0 :(得分:2)

我知道这是一个古老的话题,但没有确定的答案。 要使用更高效的函数转换值,更喜欢旧的C sintax(printf),而不是C ++流,这样更有效。我通过这种方式实施:

声明转换功能......

char* double2char(double value) {
    char tmpval[64];
    sprintf(tmpval,"%f",value);
    return doc->allocate_string(tmpval);
}

...在代码中使用......

double value = 1.0;
xml_attribute<> *attr = doc.allocate_attribute("name",double2char(value));

......这是我的实施,也许不是最好的,但更优雅,更快......

最诚挚的问候。

PS。抱歉,我的巴西英语。

答案 1 :(得分:0)

将数值类型转换为字符串超出了rapidxml的范围。要正确地执行它将需要比xml解析器更多的代码(和依赖项)。