在现代软件开发中,Rust 以其内存安全和高性能赢得了广泛青睐。而在处理配置文件、API通信或数据交换时,XML 格式仍然占据一席之地。本文将手把手教你如何在 Rust 中使用 serde_xml_rs 库(常被简称为 serde_xml)来轻松实现 XML 的序列化(将 Rust 结构体转为 XML)和反序列化(将 XML 转为 Rust 结构体)。
serde_xml_rs 是一个基于 serde 框架的 Rust 库,用于处理 XML 数据。它允许你像使用 JSON 那样,通过派生(derive)宏自动实现结构体与 XML 之间的转换。虽然它不是官方维护的(官方推荐的是 quick-xml + serde 组合),但对于简单到中等复杂度的 XML 场景,serde_xml_rs 使用起来非常直观。
首先,在你的 Cargo.toml 文件中添加以下依赖:
[dependencies]serde = { version = "1.0", features = ["derive"] }serde_xml_rs = "0.6" 注意:截至 2024 年,serde_xml_rs 的最新稳定版本是 0.6.x。确保使用兼容的 serde 版本。
假设我们要处理如下 XML 数据:
<book> <title>Rust编程之道</title> <author>张三</author> <price>79.9</price> <in_stock>true</in_stock></book> 我们可以定义对应的 Rust 结构体,并使用 #[derive(Serialize, Deserialize)] 宏:
use serde::{Serialize, Deserialize};#[derive(Serialize, Deserialize, Debug)]struct Book { title: String, author: String, price: f64, #[serde(rename = "in_stock")] in_stock: bool,} 这里我们使用了 #[serde(rename = "in_stock")] 来匹配 XML 中的字段名。如果结构体字段名与 XML 标签名一致,可以省略此属性。
现在,我们将 XML 字符串解析为 Rust 结构体:
use serde_xml_rs::from_str;fn main() { let xml_data = r#" <book> <title>Rust编程之道</title> <author>张三</author> <price>79.9</price> <in_stock>true</in_stock> </book> "#; let book: Book = from_str(xml_data).unwrap(); println!("{:#?}", book);} 运行后,你会看到结构体被成功打印出来。这就是 Rust反序列化XML 的基本用法。
反过来,我们也可以将 Rust 结构体转换为 XML 字符串:
use serde_xml_rs::to_string;fn main() { let book = Book { title: "深入浅出Rust".to_string(), author: "李四".to_string(), price: 89.0, in_stock: false, }; let xml_output = to_string(&book).unwrap(); println!("{}", xml_output);} 输出结果类似于:
<Book> <title>深入浅出Rust</title> <author>李四</author> <price>89</price> <in_stock>false</in_stock></Book> 注意:根元素名称默认是结构体名称(首字母大写)。你可以通过包装结构体来自定义根标签名。
serde_xml_rs 将字段视为子元素。若需处理 XML 属性,可使用 #[serde(rename = "@attr_name")]。quick-xml。.expect() 或 match 处理 Result,避免程序 panic。通过本文,你已经掌握了在 Rust 中使用 serde_xml_rs 进行 Rust XML解析、Rust序列化XML 和 Rust反序列化XML 的基本方法。虽然它不如 JSON 支持那么完善,但对于大多数简单 XML 场景已足够高效。希望这篇教程能帮助 Rust 初学者快速上手 XML 处理!
关键词回顾:Rust serde_xml, Rust XML解析, Rust序列化XML, Rust反序列化XML
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123855.html