【问题标题】:Updating Data in tiny Xml element更新微小 Xml 元素中的数据
【发布时间】:2015-04-08 11:52:03
【问题描述】:

我的问题是:是否可以更改 xml 元素中的数据?

我想要做的是根据按下的按钮更改元素中的数据。我目前正在读取和写入 xml 文件,但我想将其更改为,第一次写入一个新元素,然后编辑该元素,因为它目前每次只写一个新元素。

这是我当前编写新元素的代码

if (doc.LoadFile(XMLDOC) == tinyxml2::XML_SUCCESS){
    //Get Root Node
    tinyxml2::XMLElement* rootNode = doc.FirstChildElement();//Assets
    //Get Next Node
    tinyxml2::XMLElement* childNode = rootNode->FirstChildElement();//imagePaths
    //Temp Element 
    tinyxml2::XMLElement* temp = nullptr;
    tinyxml2::XMLElement* temp2 = childNode->FirstChildElement();//path

    while (temp2 != nullptr){
        temp = temp2;
        temp2 = temp2->NextSiblingElement("path");
    }
    if (temp != nullptr){
        //write the text
        tinyxml2::XMLComment* newComment = doc.NewComment("Selected Player");
        tinyxml2::XMLElement* newElement = doc.NewElement("path");

            //get text passed in 
            newElement->SetText(choice.c_str());

            newElement->SetAttribute("name", "selected_player");
            childNode->InsertAfterChild(temp, newComment);
            childNode->InsertAfterChild(newComment, newElement);

    }
    //doc.Print();
    doc.SaveFile(XMLDOC);
    }
    else{
        std::cout << "Could Not Load XML Document : %s" << XMLDOC << std::endl;
    }
}

感谢您在高级方面的帮助

【问题讨论】:

    标签: c++ xml tinyxml2


    【解决方案1】:

    我不能 100% 确定您想要什么行为。这是基于您的问题代码示例的代码示例:

    #include "tinyxml2.h"
    #include <iostream>
    #include <string>
    
    #define XMLDOC "test.xml"
    
    std::string choice = "New Text";
    
    int main()
    {
       tinyxml2::XMLDocument doc;
       if (doc.LoadFile(XMLDOC) == tinyxml2::XML_SUCCESS){
          //Get Root Node
          tinyxml2::XMLElement* rootNode = doc.FirstChildElement();//Assets
          //Get Next Node
          tinyxml2::XMLElement* childNode = rootNode->FirstChildElement();//imagePaths
          //Path Node
          tinyxml2::XMLElement* pathNode = childNode->FirstChildElement();//path
    
          if (pathNode == nullptr){
             //write the text
             tinyxml2::XMLComment* newComment = doc.NewComment("Selected Player");
             tinyxml2::XMLElement* newElement = doc.NewElement("path");
    
             newElement->SetAttribute("name", "selected_player");
             newElement->SetText(choice.c_str());
    
             childNode->InsertFirstChild(newComment);
             childNode->InsertAfterChild(newComment, newElement);
          }
          else{
             pathNode->SetText(choice.c_str());
          }
          doc.SaveFile(XMLDOC);
       }
       else{
          std::cout << "Could Not Load XML Document : " << XMLDOC << std::endl;
       }
    }
    

    给定一个如下所示的 XML 文件:

    <Assets>
    <ImagePaths>
    </ImagePaths>
    </Assets>
    

    运行后是这样的:

    <Assets>
    <ImagePaths>
        <!--Selected Player-->
        <path name="selected_player">New Text</path>
    </ImagePaths>
    </Assets>
    

    如果你再次运行程序,你只会得到一个路径节点,其中包含你选择的字符串所包含的文本。

    希望有帮助!

    【讨论】:

    • 感谢您的帮助,这不是我所需要的,而是我需要的功能。应该能够得到我想要的工作。
    • 经过进一步检查,这对我来说是完美的。只需要先向我的 xml 文件添加一个默认元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多