我来为您详细讲解一下 "C++读入XML文件示例" 的完整攻略。
什么是XML文件?
XML 是一种用于创建其他标记语言的语言,可以用来编写具有良好可读性的文件。它通过标记来表示数据的结构和内容,标记可以自己定义。XML 文件可以使用各种不同的应用程序进行读取、解析、编辑和生成。
C++如何读取和解析XML文件?
C++ 读取和解析 XML 文件通常使用第三方库来实现,比较常用的有 pugixml
和 xerces-c++
两种库。这里我们以 pugixml
为例,介绍一下如何读取和解析 XML 文件。
安装 pugixml
在使用 pugixml
之前,需要先进行安装。可以通过以下步骤安装:
- 下载
pugixml
源代码。可以从官网下载:https://pugixml.org/, 或者从 Github 上下载:https://github.com/zeux/pugixml - 解压下载的源代码压缩包。
- 打开命令行工具,进入
pugixml
源代码目录。 - 执行以下命令进行编译和安装:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make && sudo make install
读取和解析 XML 文件
在安装完成 pugixml
后,可以开始读取和解析 XML 文件。以下是一个简单的示例程序:
#include <iostream>
#include <pugixml.hpp>
int main() {
pugi::xml_document doc;
if (!doc.load_file("example.xml")) {
std::cerr << "Failed to load XML file" << std::endl;
return 1;
}
pugi::xml_node root = doc.child("root");
for (pugi::xml_node person : root.children("person")) {
std::string name = person.attribute("name").as_string();
int age = person.attribute("age").as_int();
std::cout << name << ", " << age << std::endl;
}
return 0;
}
以上程序简单地读取了一个名为 example.xml
的 XML 文件,并解析了其中的 person
标签,输出每一个人的姓名和年龄。这里 example.xml
文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<person name="Alice" age="28"/>
<person name="Bob" age="35"/>
<person name="Charlie" age="42"/>
</root>
执行以上程序,会得到以下输出结果:
Alice, 28
Bob, 35
Charlie, 42
示例说明
下面我们再看两个示例,更好地理解如何使用 pugixml
库来读取和解析 XML 文件。
示例1:解析 Instagram API 返回的 XML 数据
假设我们要从 Instagram API 返回的 XML 数据中解析出每一条照片的 ID
、用户名
、照片链接
和 标签
。以下是一个示例 XML 数据:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<id>1234567890</id>
<username>alice</username>
<photos>
<photo>
<id>111</id>
<url>https://www.example.com/photo/111.jpg</url>
<tags>tag1 tag2 tag3</tags>
</photo>
<photo>
<id>222</id>
<url>https://www.example.com/photo/222.jpg</url>
<tags>tag2 tag3 tag4</tags>
</photo>
</photos>
</user>
<user>
<id>0987654321</id>
<username>bob</username>
<photos>
<photo>
<id>333</id>
<url>https://www.example.com/photo/333.jpg</url>
<tags>tag3 tag4 tag5</tags>
</photo>
<photo>
<id>444</id>
<url>https://www.example.com/photo/444.jpg</url>
<tags>tag4 tag5 tag6</tags>
</photo>
</photos>
</user>
</users>
以下是一个示例程序,可以从上述数据中解析出所需的信息:
#include <iostream>
#include <pugixml.hpp>
int main() {
pugi::xml_document doc;
if (!doc.load_file("data.xml")) {
std::cerr << "Failed to load XML file" << std::endl;
return 1;
}
pugi::xml_node users = doc.child("users");
for (pugi::xml_node user : users.children("user")) {
std::string user_id = user.child_value("id");
std::string username = user.child_value("username");
for (pugi::xml_node photo : user.child("photos").children("photo")) {
std::string photo_id = photo.child_value("id");
std::string photo_url = photo.child_value("url");
std::string photo_tags = photo.child_value("tags");
std::cout << user_id << "\t" << username << "\t" << photo_id << "\t" << photo_url << "\t" << photo_tags << std::endl;
}
}
return 0;
}
以上程序输出以下内容:
1234567890 alice 111 https://www.example.com/photo/111.jpg tag1 tag2 tag3
1234567890 alice 222 https://www.example.com/photo/222.jpg tag2 tag3 tag4
0987654321 bob 333 https://www.example.com/photo/333.jpg tag3 tag4 tag5
0987654321 bob 444 https://www.example.com/photo/444.jpg tag4 tag5 tag6
示例2:为 XML 文件中所有 person
标签增加一个 gender
属性
假设我们已经有一个包含多个 person
标签的 XML 文件,现在想为每一个 person
标签增加一个名为 gender
的属性,并设置其值为 "unknown"
。以下是一个示例 XML 数据:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<person name="Alice" age="28"/>
<person name="Bob" age="35"/>
<person name="Charlie" age="42"/>
</root>
以下是一个示例程序,可以为每一个 person
标签增加一个 gender
属性:
#include <iostream>
#include <pugixml.hpp>
int main() {
pugi::xml_document doc;
if (!doc.load_file("data.xml")) {
std::cerr << "Failed to load XML file" << std::endl;
return 1;
}
pugi::xml_node root = doc.child("root");
for (pugi::xml_node person : root.children("person")) {
person.append_attribute("gender") = "unknown";
}
if (!doc.save_file("data_new.xml")) {
std::cerr << "Failed to save XML file" << std::endl;
return 1;
}
std::cout << "XML file saved" << std::endl;
return 0;
}
以上程序将每一个 person
标签增加了一个名为 gender
的属性,并设置其值为 "unknown"
,之后将修改后的 XML
数据保存为一个新文件 data_new.xml
。执行以上程序之后,会输出 "XML file saved"
,可在当前目录下查看新文件 data_new.xml
,内容如下:
<?xml version="1.0"?>
<root>
<person name="Alice" age="28" gender="unknown"/>
<person name="Bob" age="35" gender="unknown"/>
<person name="Charlie" age="42" gender="unknown"/>
</root>
至此,我们已经介绍了如何使用 pugixml
库来读取和解析 XML 文件,并提供了两个示例程序以帮助您更好地理解。希望这些信息能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++读入XML文件示例 - Python技术站