Tinyxml2附加功能

时间:2015-05-26 14:07:22

标签: c++ tinyxml2

我一直在寻找一种方法来使用tinyxml2附加我的xml文件,但无法找到任何东西。我将不胜感激任何帮助。

这是我的代码:

function savedata() {

    XMLNode * pRoot = xmlDoc.NewElement("Cars");
    xmlDoc.InsertFirstChild(pRoot);
    XMLElement * pElement = xmlDoc.NewElement("Brand");

    pElement->SetText("Audi");

    pRoot->InsertEndChild(pElement);

    pElement = xmlDoc.NewElement("type");
    pElement->SetText("4x4");

    pRoot->InsertEndChild(pElement);

    pElement = xmlDoc.NewElement("Date");
    pElement->SetAttribute("day", 26);
    pElement->SetAttribute("month", "April");
    pElement->SetAttribute("Year", 2015);
    pElement->SetAttribute("dateFormat", "26/04/2015");

    pRoot->InsertEndChild(pElement);


    XMLError eResult = xmlDoc.SaveFile("SavedData1.xml");
    XMLCheckResult(eResult);
}

每次运行该函数时,xml都会被覆盖,我想追加到现有文件中。

我的xml文件:

<Cars>
    <Brand>Audi</Brand>
    <Whatever>anothercrap</Whatever>
    <Date day="26" month="April" Year="2015" dateFormat="26/04/2015"/>
</Cars>

我的根目录是,我想附加到现有文件。例如,

<Cars>
    <Brand>Audi</Brand>
    <type>4x4</type>
    <Date day="26" month="April" Year="2015" dateFormat="26/04/2015"/>

   <Brand>BMWM</Brand>
   <type>truck</type>
   <Date day="26" month="April" Year="2015" dateFormat="26/04/2015"/>
</Cars>

2 个答案:

答案 0 :(得分:0)

XML是结构化数据,因此文本追加会很棘手并且可能容易出错,因为您必须确保不添加根节点两次,并且保持缩进等。

更容易的是加载XML,用TinyXML解析它,并将其写回。

答案 1 :(得分:0)

如果对xmldoc.Save使用FILE重载,则可以追加。

FILE* file = fopen("myfile.xml","a");
xmlDoc.Save(file);
fclose(file);

您只需要在执行此操作时小心,因为如果您要打印多个根节点,它将使文档混乱。如果您出于记录目的而执行此操作,那么我将完全忽略根节点,并且只知道正在读回日志的内容来追加它们,甚至根本不在乎正确的xml格式。