rapidxml中接口函数

引言

RapidXML 是一个轻量级 XML 解析库,核心接口围绕 文档解析、节点操作、属性操作 三大类展开。(基于 rapidxml.hpp 核心头文件)

一、文档操作(xml_document<> 类)

xml_document<> 是 XML 文档的核心对象,负责解析 XML 内容并管理节点树,常用接口如下:

接口函数 功能说明 示例
parse(char* text) 解析 XML 字符串.Flags 为解析标志(如 0 表示默认模式)。 doc.parse<0>(xml_str); // 解析 XML 字符串到文档对象
first_node(const char* name=0) 获取文档的第一个节点(通常是根节点)。 xml_node<>* root = doc.first_node("REFCTRL"); // 获取根节点

二、节点操作(xml_node<> 类)

xml_node<> 表示 XML 中的元素节点(如 ),是遍历和修改 XML 结构的核心,常用接口如下:

接口函数 功能说明 示例
first_node(const char* name=0) 获取当前节点的第一个子节点。name 可选,指定子节点名称(如 "node")。 xml_node<>* child = root->first_node("para"); // 获取第一个 子节点
next_sibling(const char* name=0) 获取当前节点的下一个同级节点(共享同一父节点)。 xml_node<>* next = child->next_sibling("node"); // 下一个 同级节点
parent() 获取当前节点的父节点。 xml_node<>* parent = child->parent(); // 获取子节点的父节点
name() / name(const char* new_name) 获取 / 设置节点的名称(如 "para"、"node")。 cout << child->name(); // 输出节点名称
value() / value(const char* new_value) 获取 / 设置节点的文本值(仅对文本节点有效,元素节点通常通过属性存储数据)。 node->value("文本内容"); // 设置节点文本值

三、属性操作(xml_attribute<> 类)

接口函数 功能说明 示例
first_attribute(const char* name=0) 获取当前节点的第一个属性。name 可选,指定属性名称(如 "name")。 xml_attribute<>* attr = node->first_attribute("name"); // 获取 name 属性
next_attribute(const char* name=0) 获取当前属性的下一个同级属性(同一节点内的其他属性)。 xml_attribute<>* next_attr = attr->next_attribute("value"); // 下一个 value 属性
name() / name(const char* new_name) 获取 / 设置属性的名称(如 "name"、"main")。 cout << attr->name(); // 输出属性名称
value() / value(const char* new_value) 获取 / 设置属性的值(如 "22"、"50")。 cout << attr->value(); // 输出属性值

四、代码示例

#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"
#include <iostream>

using namespace rapidxml;
using namespace std;

int main() 
{
    // 1. 读取文件
    file<> xmlFile("data.xml");
    
    // 2. 解析文档
    xml_document<> doc;
    try 
    {
        doc.parse<0>(xmlFile.data());
    } 
    catch (const parse_error& e) 
    {
        return 1;
    }
    
    // 3. 获取根节点
    xml_node<>* root = doc.first_node("REFCTRL");

    // 4. 遍历子节点和属性
    for (xml_node<>* child = root->first_node(); child; child = child->next_sibling()) 
    {
        cout << "子节点:" << child->name() << endl;
        
        // 5. 遍历节点属性
        for (xml_attribute<>* attr = child->first_attribute(); attr; attr = attr->next_attribute()) 
        {
            cout << "  属性 " << attr->name() << ":" << attr->value() << endl;
        }
    }
    return 0;
}
posted @ 2025-09-20 11:51  开心猪扒  阅读(14)  评论(0)    收藏  举报