{"id":51727950,"url":"https://github.com/huanhuan0812/litexml","last_synced_at":"2026-07-17T22:16:24.302Z","repository":{"id":371214536,"uuid":"1299232378","full_name":"huanhuan0812/litexml","owner":"huanhuan0812","description":"an xml patser library","archived":false,"fork":false,"pushed_at":"2026-07-14T01:09:36.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-14T03:05:27.506Z","etag":null,"topics":["cpp","xml","xml-parser"],"latest_commit_sha":null,"homepage":"https://huanhuan0812.github.io/api-docs/zh/api/LiteXML/api.html","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/huanhuan0812.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-13T11:49:26.000Z","updated_at":"2026-07-14T01:09:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/huanhuan0812/litexml","commit_stats":null,"previous_names":["huanhuan0812/litexml"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/huanhuan0812/litexml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huanhuan0812%2Flitexml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huanhuan0812%2Flitexml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huanhuan0812%2Flitexml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huanhuan0812%2Flitexml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/huanhuan0812","download_url":"https://codeload.github.com/huanhuan0812/litexml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huanhuan0812%2Flitexml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35597312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-17T02:00:06.162Z","response_time":116,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","xml","xml-parser"],"created_at":"2026-07-17T22:16:23.583Z","updated_at":"2026-07-17T22:16:24.294Z","avatar_url":"https://github.com/huanhuan0812.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LiteXML - 轻量级高性能 XML 解析器\n\n## 项目概述\n\nLiteXML 是一个现代化的 C++ XML 解析库，采用 C++23 标准开发，专注于提供高性能、低内存占用的 XML 解析能力。该库实现了完整的 **DOM 解析器**，同时提供了 **流式（SAX 风格）解析器**，支持命名空间、实体解码、CDATA 段、多编码自动检测等标准 XML 特性。\n\n无论是需要完整 DOM 树的小型配置，还是需要处理 GB 级大型 XML 文件的批量导入场景，LiteXML 均能提供稳定、高效、内存可控的解析能力。\n\n---\n\n## 核心设计理念\n\n### 1. 零拷贝设计\n\nLiteXML 采用 `std::string_view` 作为字符串表示方式，避免了大量字符串拷贝操作。所有文本数据直接引用原始 XML 输入，仅在必要时（如实体解码）才进行内存分配。\n\n流式解析器同样遵循零拷贝原则，事件中返回的 `string_view` 直接引用内部缓冲区。\n\n### 2. 内存池分配器（DOM 模式）\n\nDOM 模式下实现了自定义的 Arena Allocator，所有 DOM 节点和字符串数据都在内存池中分配：\n- 减少内存碎片\n- 提高分配速度\n- 实现批量释放\n- 降低内存开销\n\n### 3. 高效的文本处理\n\n- **智能实体解码**：仅在检测到实体引用时才执行解码操作\n- **懒加载文本累加**：使用 `TextAccumulator` 高效合并连续文本节点\n- **空白处理优化**：可配置的空白字符保留/忽略策略\n\n### 4. 命名空间支持\n\n完整的 XML 命名空间解析和继承机制：\n- 支持前缀命名空间声明（`xmlns:prefix`）\n- 支持默认命名空间（`xmlns`）\n- 自动继承父级命名空间\n- 命名空间 URI 解析和存储\n- **命名空间解析额外开销 \u003c 1.5%**\n\n---\n\n## 两种解析模式\n\n| 特性 | DOM 解析器 | 流式解析器（SAX 风格） |\n|------|-----------|----------------------|\n| 内存占用 | 随文档大小线性增长 | 恒定（通常 \u003c 1 MB） |\n| 解析速度 | 极快（400+ MB/s） | 高效（65+ MB/s） |\n| 使用方式 | 构建完整 DOM 树 | 事件驱动（回调/队列/处理器） |\n| 适用文档 | 小到中型（KB ~ MB） | 大型到超大型（MB ~ GB） |\n| 编码支持 | UTF-8 | UTF-8 / UTF-16 / UTF-32（自动检测） |\n| 随机访问 | 支持（遍历 DOM 树） | 不支持（流式顺序处理） |\n\n\n## 性能表现\n\n### DOM 解析器性能\n\n在 Release 构建（-O3 优化）下的性能数据（Apple Silicon M2）：\n\n| 测试场景 | 文档大小 | 吞吐量 (MB/s) | 解析时间 | 说明 |\n|---------|---------|--------------|----------|------|\n| 小型文档 | 60 字节 | 36.46 | 0.002 ms | 基准测试 |\n| 中型文档 | 3.58 KB | 236.23 | 0.015 ms | 基准测试 |\n| 多属性文档 | 1.65 KB | 287.81 | 0.006 ms | 基准测试 |\n| 无实体、无命名空间 | 24 MB | **642** | 37.34 ms | 理想场景 |\n| 有实体、无命名空间 | 57 MB | **450** | 126.67 ms | 实体解析为主要瓶颈 |\n| 有实体、有命名空间 | 62 MB | **421** | 147.27 ms | 全功能模式 |\n| 混合（实体 + 命名空间） | 68 MB | **417** | 163.07 ms | 真实场景 |\n\n**性能瓶颈分析**：\n- **实体解析**：~30% 开销（主要瓶颈，涉及字符串累加和内存池拷贝）\n- **文件大小**：~5% 开销（更多字符需要扫描）\n- **命名空间解析**：\u003c 1.5% 开销（几乎免费）\n\n### 流式解析器性能\n\n基于 66KB 文档（包含 1,000 个元素）的测试结果：\n\n| 指标 | 数值 |\n|------|------|\n| 解析耗时 | **1 ms** |\n| 吞吐量 | **65,248 KB/s** |\n| 内存占用 | 恒定（可配置） |\n\n### 典型场景性能预期（流式）\n\n| 文档规模 | 预期解析时间 | 内存占用 |\n|----------|-------------|----------|\n| 1 MB | \u003c 20 ms | \u003c 256 KB |\n| 10 MB | \u003c 150 ms | \u003c 512 KB |\n| 100 MB | \u003c 1.5 s | \u003c 1 MB |\n| 1 GB | \u003c 15 s | \u003c 2 MB |\n\n*注：以上数据基于标准配置，实际性能取决于硬件和文档结构*\n\n### 编译优化效果\n\nDebug 构建与 Release 构建的性能对比：\n\n| 构建类型 | 优化选项 | 相对性能 |\n|---------|---------|---------|\n| Debug | -O0, ASAN/UBSAN | 基准线 (1x) |\n| Release | -O3, LTO, 架构优化 | **10-50x** |\n\nRelease 构建启用的优化：\n- `-O3`：最高级别优化\n- `-fomit-frame-pointer`：省略帧指针\n- `-fstrict-aliasing`：严格别名规则\n- `-funroll-loops`：循环展开\n- `-finline-functions`：函数内联\n- `-march=native`：CPU 特定指令集\n- `-flto`：链接时优化\n\n### 与同类库性能对比\n\nLiteXML 在提供完整功能（命名空间 + 实体 + 错误处理）的同时，保持了优秀的解析性能。\n\n**测试环境**：Apple Silicon M4，Release 构建（-O3），50 次迭代取平均值。\n\n| 解析器 | 无实体 (24MB) | 有实体 (57MB) | 有实体+NS (62MB) | 混合 (68MB) | 命名空间 | 错误处理 | 内存安全 |\n|--------|--------------|--------------|-----------------|------------|---------|---------|---------|\n| **RapidXML** | **2450** | **1281** | **1280** | **1280** | ❌ 手动 | ❌ | ❌ |\n| **pugixml** | **1442** | **789** | **759** | **787** | ✅ | ✅ | ✅ |\n| **LiteXML** | **642** | **450** | **421** | **417** | ✅ | ✅ | ✅ |\n| **TinyXML2** | 218 | 345 | ❌ 失败 | ❌ 失败 | ❌ | ✅ | ✅ |\n\n\u003e **注**：TinyXML2 在带命名空间的 XML 上解析失败（Dummy=0），数据为虚高（快速失败路径）。\n\n### 解析器定位总结\n\n| 解析器 | 定位 | 一句话总结 |\n|--------|------|-----------|\n| **RapidXML** | 极致性能 | 速度之王，但裸奔（无安全、无命名空间） |\n| **pugixml** | 性能 + 功能 | 性能与功能的完美平衡 |\n| **LiteXML** | 安全 + 易用 | 安全优先，性能够用 |\n| **TinyXML2** | 简单入门 | 不适合高性能/复杂场景 |\n\n### 功能完整性对比\n\n| 功能 | RapidXML | pugixml | LiteXML | TinyXML2 |\n|------|----------|---------|---------|----------|\n| DOM 解析 | ✅ | ✅ | ✅ | ✅ |\n| 流式解析 | ❌ | ❌ | ✅ | ❌ |\n| 命名空间 | ❌ 手动 | ✅ | ✅ | ❌ |\n| 实体解码 | ✅ | ✅ | ✅ | ✅ |\n| 错误处理 | ❌ | ✅ | ✅ | ✅ |\n| 内存安全 | ❌ | ✅ | ✅ | ✅ |\n| 零拷贝设计 | ✅ | ❌ | 部分 | ❌ |\n| 内存池 | ❌ | ❌ | ✅ | ❌ |\n| C++23 现代接口 | ❌ | ❌ | ✅ | ❌ |\n\n### 选型建议\n\n| 你的需求 | 推荐 | 理由 |\n|---------|------|------|\n| **极致性能，输入可控，无实体** | **RapidXML** | 2450 MB/s，无人能敌 |\n| **极致性能，输入可控，有实体** | **RapidXML** | 1281 MB/s，仍然最快 |\n| **高性能 + 完整功能（命名空间/实体）** | **pugixml** | 759-1442 MB/s，功能完整 |\n| **安全性优先 + 可接受的性能** | **LiteXML** | 421-642 MB/s，内存安全 + 错误处理 |\n| **需要流式处理超大文件** | **LiteXML (流式)** | 恒定内存占用处理 GB 级文档 |\n| **教学/简单工具，XML 无命名空间** | **TinyXML2** | API 简单，但性能最差 |\n\n---\n\n## 技术架构\n\n### DOM 解析器解析流程\n\n```\n输入 XML\n    ↓\n解析 Prolog（可选）\n    ↓\n解析内容\n    ├── 元素节点\n    │   ├── 属性解析\n    │   ├── 命名空间解析\n    │   └── 子节点递归\n    ├── 文本节点（优化合并）\n    ├── CDATA 段\n    ├── 注释（可配置）\n    └── 处理指令（可配置）\n    ↓\n构建 DOM 树\n    ↓\n返回文档对象\n```\n\n### 流式解析器架构\n\n```\n输入 XML（任意编码）\n    ↓\n编码自动检测（BOM / 声明）\n    ↓\n缓冲区管理（可配置大小 + 预取）\n    ↓\n事件驱动解析\n    ├── start_element（含命名空间）\n    ├── end_element\n    ├── text（可合并）\n    ├── cdata\n    ├── comment\n    └── processing_instruction\n    ↓\n三种使用模式：\n    ├── 回调函数\n    ├── 事件队列\n    └── 处理器接口（推荐）\n```\n\n### 核心组件\n\n| 组件 | DOM 解析器 | 流式解析器 |\n|------|-----------|-----------|\n| 解析器主类 | `XMLParser` | `StreamParser` |\n| 文档根节点 | `DocumentNode` | — |\n| 元素节点 | `ElementNode` | `ElementInfo`（事件） |\n| 内存管理 | `DocumentAllocator` | 可复用缓冲区 |\n| 文本处理 | `TextAccumulator` | 批量文本合并 |\n\n### DOM 内存管理\n\n```\nDocumentAllocator\n    ├── 内存块 (64KB)\n    │   ├── 分配区域\n    │   └── 对齐处理\n    ├── 节点分配\n    │   ├── ElementNode\n    │   ├── TextNode\n    │   ├── CDataNode\n    │   └── CommentNode\n    └── 字符串驻留\n        └── string_view 引用\n```\n\n---\n\n## 可靠性\n\n### 错误处理\n\n- 完整的错误类型枚举\n- 精确的错误位置信息（行号/列号/偏移量）\n- 优雅的错误恢复\n- 深度限制保护（DOM）和嵌套限制（流式）\n\n### 内存安全\n\n- 禁止拷贝构造和赋值\n- RAII 资源管理\n- 析构时自动清理树结构\n- AddressSanitizer 和 UndefinedBehaviorSanitizer 支持\n\n### 测试覆盖\n\n- 20+ 功能测试用例\n- 边界条件测试\n- 错误路径测试\n- 性能基准测试\n- 内存泄漏测试\n\n---\n\n## 适用场景\n\n| 场景 | 推荐模式 | 理由 |\n|------|---------|------|\n| 小型配置文件解析 | DOM | 快速、方便 |\n| 大型 XML 数据导入 | 流式 | 内存可控 |\n| 网络流式 XML | 流式 | 低延迟、逐事件 |\n| 实时系统 | 两者皆可 | 根据文档大小选择 |\n| 嵌入式/IoT 设备 | 流式 | 内存受限 |\n| 批量处理（大量小文件） | DOM | 吞吐量最高 |\n| 数据转换/ETL | 流式 | 适合大文件顺序处理 |\n\n---\n\n## 构建系统\n\n### 支持的平台\n\n- macOS (Apple Silicon)\n- Linux (x86_64, ARM)\n- Windows (MSVC)\n\n### 构建选项\n\n- 静态库 / 动态库\n- Debug / Release / RelWithDebInfo / MinSizeRel\n- AddressSanitizer 支持 (Debug)\n- UndefinedBehaviorSanitizer 支持 (Debug)\n- LTO 支持 (Release, Linux)\n\n### 编译器要求\n\n- Clang 16+\n- GCC 12+\n- MSVC 2022+\n\n---\n\n## 性能优化建议\n\n### DOM 模式\n\n1. **关闭不必要的功能**：如不需要命名空间，设置 `config.parseNamespaces = false`\n2. **跳过注释**：`config.parseComments = false`\n3. **跳过处理指令**：`config.parseProcessingInstructions = false`\n\n### 流式模式\n\n1. **配置缓冲区大小**：根据文档大小调整 `config.buffer_size`\n2. **启用预取**：`config.prefetch_data = true`\n3. **禁用不必要的验证**：生产环境可关闭 `config.validate_names`\n4. **合并文本节点**：`config.coalesce_text = true`\n5. **使用事件处理器接口**：比回调方式开销更小\n\n---\n\n## 总结\n\nLiteXML 是一个为现代 C++ 应用设计的高性能 XML 解析库。通过采用零拷贝设计、内存池技术、编译时优化以及流式架构，它在保持代码简洁和可维护性的同时：\n\n- **DOM 模式**：实现 400+ MB/s 的解析吞吐量，全功能模式下可达 417 MB/s，适合中小型文档\n- **流式模式**：以恒定内存占用（\u003c 2 MB）处理 GB 级文档，适合大型数据集\n\n无论是用于高性能服务器、嵌入式系统、实时应用，还是大规模数据导入，LiteXML 都能提供可靠、高效的 XML 解析能力。\n\n---\n\n**版本**：2.0.0  \n**语言**：C++23  \n**许可**：MIT  \n**作者**：_huanhuan_","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuanhuan0812%2Flitexml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuanhuan0812%2Flitexml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuanhuan0812%2Flitexml/lists"}