tinyxml的xml读取

本文介绍了一种使用C++ TiXml库解析XML配置文件的方法,详细展示了如何读取配置信息及多点数据,适用于需要从XML文件中加载Flash应用路径、屏幕尺寸及一系列坐标点的应用场景。
- < config >
  < file name =" E:/code/TestMulPoints/MulPoints.swf " screenWidth =" 800 " screenHeight =" 600 " />
- < points >
  < point x =" x00 " y =" y00 " />
  < point x =" x01 " y =" y01 " />
  < point x =" x02 " y =" y02 " />
  < point x =" x03 " y =" y03 " />
  < point x =" x04 " y =" y04 " />
  </ points >
  </ config >
 
 
<think> 我们被要求讲解TinyXML库的XML读写操作。用户提供的引用代码展示了TinyXML创建XML文件的基本步骤。 由于用户之前询问的是Qt的XML操作,但这次明确转向TinyXML,因此我们需要专注于TinyXML的使用方法。 TinyXML是一个轻量级的C++ XML解析库,可以用于读取、修改和创建XML文档。 我们将分为以下几个部分进行讲解: 1. 读取XML文件 2. 创建XML文件(用户提供的代码已有示例,我们将进行解释和补充) 3. 修改XML文件 注意:用户提供的代码中使用了TiXmlDocument, TiXmlDeclaration, TiXmlElement等类。 由于用户要求使用中文回答,并且按照指定的格式要求,我们将在回答中避免使用数学公式(因为这里不需要),但会注意代码块和引用标识。 同时,我们将在最后生成相关问题。 下面开始详细讲解: </think> ### TinyXML XML读写操作方法 TinyXML 是一个轻量级 C++ XML 解析库,适用于简单 XML 操作。以下是核心读写方法: --- #### **1. XML文件创建** ```cpp #include "tinyxml.h" void createXML() { // 创建文档和声明 TiXmlDocument doc("config.xml"); TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "", ""); doc.LinkEndChild(decl); // 创建根节点 TiXmlElement* root = new TiXmlElement("Config"); doc.LinkEndChild(root); // 添加子节点及属性 TiXmlElement* server = new TiXmlElement("Server"); server->SetAttribute("ip", "192.168.1.100"); server->SetAttribute("port", 8080); root->LinkEndChild(server); // 保存文件 doc.SaveFile(); } ``` **关键操作**: - `TiXmlDocument`: 文档容器 - `TiXmlDeclaration`: XML声明(`<?xml version="1.0"?>`) - `SetAttribute()`: 设置节点属性 - `LinkEndChild()`: 添加子节点 - `SaveFile()`: 保存至文件[^1] --- #### **2. XML文件读取** ```cpp void readXML() { TiXmlDocument doc("config.xml"); if (!doc.LoadFile()) return; // 加载失败则退出 TiXmlElement* root = doc.RootElement(); // 获取根节点 if (!root) return; // 遍历子节点 for (TiXmlElement* elem = root->FirstChildElement(); elem; elem = elem->NextSiblingElement()) { const char* tag = elem->Value(); // 节点名称 // 读取属性 const char* ip = elem->Attribute("ip"); int port = 0; elem->QueryIntAttribute("port", &port); printf("Tag: %s, IP: %s, Port: %d\n", tag, ip, port); } } ``` **关键操作**: - `LoadFile()`: 加载XML文件 - `FirstChildElement()`/`NextSiblingElement()`: 节点遍历 - `Attribute()`: 获取字符串属性 - `QueryIntAttribute()`: 获取数值属性(支持`int`/`double`等) --- #### **3. 修改XML节点** ```cpp void updateXML() { TiXmlDocument doc("config.xml"); if (!doc.LoadFile()) return; TiXmlElement* root = doc.RootElement(); TiXmlElement* server = root->FirstChildElement("Server"); // 修改属性 server->SetAttribute("port", 9000); // 更新端口 // 添加新节点 TiXmlElement* timeout = new TiXmlElement("Timeout"); timeout->SetAttribute("value", 30); server->LinkEndChild(timeout); doc.SaveFile(); // 保存修改 } ``` --- #### **4. 错误处理** ```cpp if (!doc.LoadFile()) { std::cerr << "Error: " << doc.ErrorDesc() << " (Line " << doc.ErrorRow() << ")" << std::endl; } ``` --- ### DOM结构核心类 | **类名** | **作用** | |------------------|--------------------------| | `TiXmlDocument` | XML文档容器 | | `TiXmlElement` | XML元素节点(含属性) | | `TiXmlText` | 节点文本内容 | | `TiXmlComment` | 注释节点 | | `TiXmlAttribute` | 节点属性(需通过元素访问)| > ⚠️ 注意:TinyXML 不提供 XPath 支持,复杂查询需手动遍历节点树。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值