0

新しいタグ「tinyxml2」を作成することは許可されていませんでした。そのため、タグ「tinyxml」を使用していますが、「tinyxml2」を使用しています!

サブツリー要素を既存の XML ファイルに挿入しようとしています。私の問題は、プログラムを実行してXMLファイルをチェックした後、サブツリーがドキュメント内に存在しないことです。元のコードでは、ファイルの読み込みと保存中にエラーをチェックしているので、これらの関数に問題はなく、正しく機能しています。UserList.NewElement(*name*)私はいくつかの異なるアプローチを試しましたが、 -functionを使用して単一の要素を追加しても問題なく動作します。今、テキスト変数からサブツリー全体を挿入したい...

私の最新のアプローチは次のようになります(とをチェックせずに簡略化LoadFileSaveFile

tinyxml2::XMLDocument UserList;
UserList.LoadFile(*Path*);

const char* XMLText = "<user name=\"test-user\" gender=\"male\"><ability description=\"I_can_do_magic\" /></user>";

tinyxml2::XMLDocument TestParse;
TestParse.Parse(XMLText);
tinyxml2::XMLElement* myNewUser = TestParse.RootElement();
UserList.FirstChildElement( "magicians" )->InsertEndChild(myNewUser);
UserList.SaveFile(*Path*);

ところで...保存したXMLファイルXMLTextを使用して解析しようとするtinyxml2::XMLDocument UserListと、プログラムの実行後に空になります。これは、元の XML ドキュメントのコンテンツも、新しく解析されたサブツリーも保存されないことを意味します。この事実により、私は2番目を使用しましたtinyxml2::XMLDocument TestParse。これで、元のコンテンツを含む XML ファイルが保存されましたが、解析されたサブツリーはまだ失われています...解決策/ヘルプ/アドバイスをありがとうございました。

4

2 に答える 2

1

TinyXML-2 は、XMLDocument に格納されているメモリ プール内のノード (XMLNode) にメモリを割り当てます。これにより、TinyXML-1 に存在するメモリの断片化の問題が修正されます。

副作用として、ある XMLDocument から別の XMLDocument に要素を移動できません。コピーのみ可能です。残念ながら、TinyXML-2 は現在ディープ コピー (ツリー コピー) をサポートしていないため、ご希望の処理ができません。(ただし、github サイトではディープ コピーが要求されています。)

ちなみに、myNewUser は UserList とは異なるメモリ プールにあるため、記述したコードは (デバッグ モードで) アサートするか、クラッシュすると予想されます。

于 2014-09-10T18:28:37.593 に答える