一.xml 概述
1.什么是XML?
XML(eXtensible Markup Language)是一种标记语言,1998 年 2 月:XML 1.0 发布,用于存储和传输结构化数据。与HTML专注于数据显示不同,XML专注于数据本身及其结构。
它的核心特点包括:
可扩展性:用户可以自定义标签和数据结构
自描述性:数据与其描述信息共存
平台无关性:独立于任何特定硬件或操作系统
标准化:由W3C维护的开放标准
XML的设计目标是存储和传输数据,同时保持简单性和通用性,这使得它成为不同系统间数据交换的理想选择。
2. XML语法规则详解
2.1 文档结构
一个完整的XML文档包含以下部分:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是一个XML注释 -->
<根元素>
<子元素 属性="值">内容</子元素>
<空元素/>
</根元素>
说明:
XML声明(可选):<?xml version="1.0" encoding="UTF-8"?>
注释:<!-- 注释内容 -->
元素:由开始标签、内容和结束标签组成
根元素:文档必须有且仅有一个根元素
2.2 元素命名规则
XML元素命名必须遵循以下规则:
名称可以包含字母、数字和其他字符
名称不能以数字或标点符号开头
名称不能以"xml"(任何大小写组合)开头
名称不能包含空格
区分大小写
应用建议:
使用有意义的描述性名称
保持命名一致性(全小写或驼峰式)
避免使用特殊字符(即使语法允许)
3.xml与json对比

何时选择XML:
需要复杂文档结构和丰富元数据
已有基于XML的生态系统
需要强大的验证机制
处理文档型数据而非简单数据结构
4.XML的未来发展
尽管JSON在Web API领域占据主导地位,XML仍在许多领域保持重要地位:
XML 1.1和1.0第三版:持续改进对Unicode的支持
XML Schema 1.1:增强了类型系统和验证能力
XPath/XQuery 3.1:提供更强大的查询功能
行业特定标准:许多行业标准继续基于XML发展
二.xml应用领域
1 数据交换与集成
XML是不同系统间数据交换的通用语言:
企业应用集成(EAI)
B2B电子商务
金融交易(如FIXML用于金融数据)
医疗数据交换(如HL7标准)
2 Web服务与技术
现代Web服务的核心组成部分:
SOAP协议基于XML格式
REST服务常使用XML作为数据格式
RSS/Atom订阅格式
Web应用配置文件(如web.xml)
3 文档处理
Office文档格式(如Microsoft Office的.docx、.xlsx本质上是ZIP压缩的XML文件)
PDF内部结构
电子书格式(EPUB基于XML)
4 配置文件
众多软件和框架使用XML作为配置格式:
Java EE应用服务器配置
Spring框架的早期配置
Android布局文件
Ant构建脚本
5 数据库与大数据
XML数据库(如eXist、BaseX)
SQL Server等关系数据库的XML支持
大数据处理中的中间格式
三.xml常用的c/c++库
1.C 语言 XML 库
1.1 libxml2
特点:功能全面,支持 XML/HTML/XPath/XSLT,GPL/LGPL 许可。
适用场景:复杂 XML 处理(如 Web 服务、XML 验证)。
1.2 Expat
特点:事件驱动型解析器,轻量无依赖,MIT 许可。
适用场景:嵌入式系统、内存受限环境。
1.3 Mini-XML (mxml)
特点:单文件库,支持 DOM 和流式解析,MIT 许可。
适用场景:快速集成、配置文件解析。
1.4 RapidXML
特点:C++ 库但提供 C 兼容 API,解析速度极快,MIT 许可。
适用场景:高性能需求(如游戏引擎)。
2.C++ 语言 XML 库
2.1 TinyXML2
特点:轻量级 DOM 解析器,双文件(.h+.cpp),zlib 许可。
适用场景:中小型 XML 文件,游戏配置。
2.2 pugixml
特点:高性能、支持 XPath,BSD 许可。
适用场景:需要 XPath 查询的场景。
2.3 libxml++
特点:libxml2 的 C++ 封装,支持 XPath/XSLT。
适用场景:需要与 libxml2 兼容的 C++ 项目。
2.4. Boost.PropertyTree
特点:非严格 XML 解析器,支持多种格式(JSON/INI),Boost 许可。
适用场景:配置文件、数据序列化。
2.5 RapidXML
特点:前文 C 库中已提及,也可直接用于 C++。
3.各个库对比

选择建议:
C 项目:优先考虑 Expat(轻量)或 libxml2(功能全)。
C++ 项目:优先用 TinyXML2(简单)或 pugixml(高性能 + XPath)。
嵌入式系统:Mini-XML 或 Expat。
若需随机访问节点或修改 XML(如配置文件用法),选 Mini-XML。
若为超大型文件或内存受限环境,选 Expat。
需要 XPath:libxml2(C),支持完整 XPath 3.1; libxml++(C++),支持XPath 2.0/3.1, pugixml(C++) 支持XPath 1.0。
说明:
XPath(XML Path Language)是一种用于在 XML 文档中定位和选择特定节点的查询语言,它提供了一种简洁而强大的方式来导航 XML 结构。如:
// pugixml (C++)
pugi::xpath_node_set nodes = doc.select_nodes("//book[price>30]"); //选择价格超过30的书籍。