我是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文件中,因此性能是我关注的主要问题。
问候, 奥利弗
答案 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解析器更多的代码(和依赖项)。