下面是关于C++生成和解析XML文件的攻略。
生成XML文件
1. 引入头文件
XML文件的生成需要用到tinyxml2这个开源库。因此首先需要下载此库,并在代码中引入相应的头文件。
#include <tinyxml2.h>
2. 创建根节点
在生成XML文件之前,需要先创建一个根节点。可以使用tinyxml2
库提供的XMLDocument
类来创建根节点。可以使用NewDocument()
方法创建一个新的文档,并使用NewElement()
方法添加元素。
tinyxml2::XMLDocument doc;
auto root = doc.NewElement("root");
doc.InsertFirstChild(root);
3. 添加子节点
在创建根节点后,可以添加子节点。仍然可以使用NewElement()
方法来添加元素,然后使用InsertEndChild()
方法将其插入到相应的位置。
auto child1 = doc.NewElement("child1");
auto attr1 = doc.NewAttribute("name", "value1");
child1->InsertEndChild(attr1);
root->InsertEndChild(child1);
auto child2 = doc.NewElement("child2");
auto attr2 = doc.NewAttribute("name", "value2");
child2->InsertEndChild(attr2);
root->InsertEndChild(child2);
4. 设置属性和值
在添加子节点后,可以设置属性和值。可以使用SetAttribute()
方法设置属性,以及使用SetText()
方法和InsertEndChild()
方法设置值。
auto child3 = doc.NewElement("child3");
child3->SetAttribute("name", "value3");
child3->SetText("text3");
root->InsertEndChild(child3);
auto child4 = doc.NewElement("child4");
auto attr3 = doc.NewAttribute("name", "value4");
auto text4 = doc.NewText("text4");
child4->InsertEndChild(attr3);
child4->InsertEndChild(text4);
root->InsertEndChild(child4);
5. 保存文档
在设置完属性和值后,需要将文档保存到文件中。可以使用SaveFile()
方法将文档保存到指定的文件中。
doc.SaveFile("test.xml");
完整示例代码:
#include <iostream>
#include <tinyxml2.h>
int main() {
tinyxml2::XMLDocument doc;
auto root = doc.NewElement("root");
doc.InsertFirstChild(root);
auto child1 = doc.NewElement("child1");
auto attr1 = doc.NewAttribute("name", "value1");
child1->InsertEndChild(attr1);
root->InsertEndChild(child1);
auto child2 = doc.NewElement("child2");
auto attr2 = doc.NewAttribute("name", "value2");
child2->InsertEndChild(attr2);
root->InsertEndChild(child2);
auto child3 = doc.NewElement("child3");
child3->SetAttribute("name", "value3");
child3->SetText("text3");
root->InsertEndChild(child3);
auto child4 = doc.NewElement("child4");
auto attr3 = doc.NewAttribute("name", "value4");
auto text4 = doc.NewText("text4");
child4->InsertEndChild(attr3);
child4->InsertEndChild(text4);
root->InsertEndChild(child4);
doc.SaveFile("test.xml");
return 0;
}
解析XML文件
1. 引入头文件
在解析XML文件之前,同样需要引入tinyxml2
库的头文件。
#include <tinyxml2.h>
2. 加载XML文件
在加入头文件后,使用tinyxml2
库提供的XMLDocument
类加载指定的XML文件。
tinyxml2::XMLDocument doc;
doc.LoadFile("test.xml");
3. 获取根节点
通过FirstNode()
或者FirstChildElement()
方法获取根节点。
auto root = doc.FirstChildElement("root");
4. 遍历子节点和属性
使用FirstChildElement()
方法遍历所有的子节点,然后使用Attribute()
方法获取属性。
for (auto child = root->FirstChildElement(); child != nullptr; child = child->NextSiblingElement()) {
std::cout << child->Name() << std::endl;
for (auto attr = child->FirstAttribute(); attr != nullptr; attr = attr->Next()) {
std::cout << " " << attr->Name() << ": " << attr->Value() << std::endl;
}
}
5. 获取节点的值
在遍历完所有的子节点和属性后,可以通过GetText()
方法获取节点的值。
auto child3 = root->FirstChildElement("child3");
auto child3_text = child3->GetText();
std::cout << "child3 text: " << child3_text << std::endl;
完整示例代码:
#include <iostream>
#include <tinyxml2.h>
int main() {
tinyxml2::XMLDocument doc;
doc.LoadFile("test.xml");
auto root = doc.FirstChildElement("root");
for (auto child = root->FirstChildElement(); child != nullptr; child = child->NextSiblingElement()) {
std::cout << child->Name() << std::endl;
for (auto attr = child->FirstAttribute(); attr != nullptr; attr = attr->Next()) {
std::cout << " " << attr->Name() << ": " << attr->Value() << std::endl;
}
}
auto child3 = root->FirstChildElement("child3");
auto child3_text = child3->GetText();
std::cout << "child3 text: " << child3_text << std::endl;
return 0;
}
希望这个攻略对您有所帮助
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++生成和解析XML文件的讲解 - Python技术站