1

私はRapidXMLにかなり慣れていません。Xmlドキュメントを作成してファイルに出力したいと思います。すべてが機能しますが、プロセスの一部を正しく実行しているかどうかはわかりません。

doubleであるノードに属性を追加します。

私はstdc++のものを使用しています:

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

大量のdoubleをxmlファイルに保存する必要があるため、ここでの主な関心事はパフォーマンスです。

こんにちは、オリバー

4

2 に答える 2

2

それは古いトピックですが、決定的な答えはありません。より効率的な関数で値を変換するには、C++ストリーミングよりも古いCsintax(printf)を使用する方が効率的です。私はこの方法で実装しました:

変換のための関数を宣言します。

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。私のブラジル英語でごめんなさい。

于 2011-08-27T15:58:25.457 に答える
0

数値型を文字列に変換することは、rapidxmlの範囲を超えています。これを適切に行うには、xmlパーサーだけでなく、はるかに多くのコード(および依存関係)が必要になります。

于 2011-07-16T01:19:51.593 に答える