1

我对 RapidXML 很陌生。我想构建一个 Xml 文档并将其打印到文件中。一切正常,但我不确定我是否正确执行了该过程的一部分:

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

我正在使用标准 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);

有没有更优雅/更快的方式?像(一厢情愿的想法):

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

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

问候,奥利弗

4

2 回答 2

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));

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

此致。

附言。对不起我的巴西英语。

于 2011-08-27T15:58:25.457 回答
0

将数字类型转换为字符串超出了 rapidxml 的范围。要正确地做到这一点,将需要更多的代码(和依赖项),而不仅仅是 xml 解析器。

于 2011-07-16T01:19:51.593 回答