rapidxml - 覆盖以前的xml_nodes(rapidxml - overwriting

2019-06-25 13:15发布

我刚开始使用rapidxml。 我第一次创建一个XML文件的阅读。 工作这么快的容易。

这是我手工装箱。

<?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>

这是创建一个XML文件中的代码,

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。 我知道这一定是简单还是我因小失大。

谢谢您的帮助和时间!

Answer 1:

我不知道这是否会帮助,但这种存在于文档 :

一个特殊之处是,节点和属性不拥有自己的名称和值的文本。 这是因为通常它们只指针存储的源文本。 所以,节点分配一个新的名称或值时,必须小心,以确保该字符串的适当寿命。 实现这一目标最简单的方法是分配从xml_document内存池的字符串。 在上面的例子,这是没有必要的,因为我们只指定字符常量。 但低于该代码使用memory_pool :: allocate_string()函数来分配节点名称(其将具有相同的寿命作为文档),并将其分配给一个新的节点。

我可以在你的代码看,它似乎是你的字符数组的x,y,z是在循环的范围内创建,因此不能满足上述要求。



文章来源: rapidxml - overwriting previous xml_nodes
标签: rapidxml