2011-01-03 25 views
1

RapidXMLの新機能です。 XML文書を作成してファイルに出力したい。すべてが機能しますが、私がプロセスの権利の一部をしているかどうかはわかりません:RapidXMLノードの属性として数値(double/float)を追加します。

ダブルであるノードに属性を追加する。

私は、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 /より高速な方法はありますか? (wishfull思考)のようなもの:

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

私はパフォーマンスがここに私の主要な関心事であるように、私のxmlファイルにダブルスのトンを保存する必要があります。文字列に数値型の変換

挨拶、 オリバー

+2

ファイルに書き込むだけの場合は、単にiostreamsを使用してDOMステップ全体の作成をスキップするのはなぜですか? – Nim

+0

ええと、既に使用中のライブラリがたくさんあるので、私は(簡単な)xmlプリンタを自分自身で作成したくありませんでした。 RapidXMLが最も速いと思われる。バイナリ/ iniファイルの代わりにxmlを使用しているので、すべてが拡張可能であり、後で他のツールで使用できるようになります。 –

答えて

2

これは古いトピックですが、決定的な回答はありません。 より効率的な関数で値を変換するには、C++ストリーミングより古いC sintax(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。私のブラジルの英語を申し訳ありません。

+0

これがパフォーマンスを向上させる場合は、ありがとうございます。 RapidXMLは現在私が期待していた種類の操作をサポートしていないので、あなたの答えを正しいものとしてマークし、それを使って完了します:) –

0

はrapidxmlの範囲を超えています。これを正しく行うには、xmlパーサーだけでなく、さらに多くのコード(および依存関係)が必要です。

+0

さて、RapidXMLを使用してドキュメントを最初から構築する場合、これは私が期待する関数であり、allocate_stringも動的に割り当てなければならないので、最も簡単な解決策は、単純な変換コード(allocate_string_from_value) )。たぶん、より速いコードは、変換部分を再実装する必要がありますが、実際にはいくつかのコードを取るでしょう。 –

関連する問題