这是我手动创作的.
<?xml version="1.0" encoding="utf-8"?> <GPS> <Path> <Point X="-3684.136" Y="3566.282" Z="285.2893" /> <Point X="-3681.816" Y="3540.431" Z="283.3658" /> <Point X="-3687.079" Y="3515.315" Z="282.6284" /> </Path> </GPS>
我可以轻松阅读,没有任何问题.然后我想把它写到一个新文件.
但问题是它不断覆盖以前的xml_nodes.
例如,
<?xml version="1.0" encoding="UTF-8"?> <GPS> <Path> <Point X="-3687.08" Y="3515.31" Z="282.628"/> <Point X="-3687.08" Y="3515.31" Z="282.628"/> <Point X="-3687.08" Y="3515.31" Z="282.628"/> </Path> </GPS>
int Write(pathStruct *toStore) { xml_document<> doc; xml_node<>* decl = doc.allocate_node(node_declaration); decl->append_attribute(doc.allocate_attribute("version","1.0")); decl->append_attribute(doc.allocate_attribute("encoding","UTF-8")); doc.append_node(decl); xml_node<> *GPS = doc.allocate_node(node_element,"GPS"); doc.append_node(GPS); cout << "Saving GrindPath " << endl; xml_node<> *Path = doc.allocate_node(node_element,"Path"); GPS->append_node(Path); for(int i = 0;i<3;i++) //Temp Static { xml_node<> *Point = doc.allocate_node(node_element,"Point"); Path->append_node(Point); char x[10]; FloattocharA(toStore->X[i],x); Point->append_attribute(doc.allocate_attribute("X",x)); char y[10]; FloattocharA(toStore->Y[i],y); Point->append_attribute(doc.allocate_attribute("Y",y)); char z[10]; FloattocharA(toStore->Z[i],z); Point->append_attribute(doc.allocate_attribute("Z",z)); //GrindPath->append_node(Point); //doc.first_node()->append_node(GrindPath); //Point = GrindPath->next_sibling(); cout << "x:" << toStore->X[i] << " y:" << toStore->Y[i] << " z:" << toStore->Z[i] << endl; } cout << "Done! " << endl; std::ofstream myfile; myfile.open ("./toStore.xml"); myfile << doc; return 0; };
我的问题是他如何阻止它覆盖以前的xml_nodes?
我尝试过很多东西,但每次都会覆盖以前的xml_nodes.
我知道这一定很简单,或者我错过了大局.
谢谢你的帮助和时间!
One quirk is that nodes and attributes do not own the text of their
names and values. This is because normally they only store pointers to
the source text. So,when assigning a new name or value to the node,
care must be taken to ensure proper lifetime of the string. The
easiest way to achieve it is to allocate the string from the
xml_document memory pool. In the above example this is not necessary,
because we are only assigning character constants. But the code below
uses memory_pool::allocate_string() function to allocate node name
(which will have the same lifetime as the document),and assigns it to
a new node.
我可以在你的代码中看到你的char数组x,y,z似乎是在你的循环范围内创建的,因此不满足上面的要求.