Acerca de XML a Serde Rust
Pega tu XML y obtén definiciones de structs Rust con #[derive(Serialize, Deserialize)] y atributos serde para atributos XML.
Preguntas frecuentes
¿Qué es la generación de structs Rust desde XML?
La generación de structs Rust desde XML analiza un documento XML y produce definiciones de structs Rust con macros derive de serde y quick-xml. Los structs pueden usarse con el deserializador basado en serde de quick-xml para analizar XML en estructuras de datos Rust tipadas.
¿Qué crates de Rust puedo usar para deserializar XML en el struct generado?
Añade quick-xml = { version = "0.31", features = ["serialize"] } y serde = { version = "1", features = ["derive"] } a Cargo.toml. Luego anota el struct con #[derive(Deserialize)] y usa quick_xml::de::from_str(&xml_string). Alternativamente, usa serde-xml-rs para una convención de manejo de atributos ligeramente diferente.
¿Cómo se gestionan los atributos XML en la deserialización serde de Rust?
Con el soporte serde de quick-xml, los campos de atributos se anotan con #[serde(rename = "@nombre_atributo")]. La convención del prefijo @ distingue los atributos de los elementos hijo. El generador produce estas anotaciones. Verifica que los nombres de los atributos coincidan exactamente con el fuente XML, incluyendo cualquier prefijo de espacio de nombres.
¿Cómo gestiono los elementos XML opcionales en un struct de Rust?
Envuelve el tipo del campo en Option<T>: pub nombre: Option<String>. Con #[serde(default)], un elemento ausente establece el campo en None. Para el contenido de texto de un elemento, usa un campo anotado con #[serde(rename = "$text")]. Para elementos opcionales vacíos, Option<String> devuelve Some(""); añade un deserializador personalizado para mapear cadenas vacías a None si es necesario.
¿Puedo usar el struct de Rust generado para leer y escribir XML?
Sí. Añade #[derive(Serialize, Deserialize)] para obtener ambas direcciones. Para serializar de vuelta a XML: quick_xml::se::to_string(&mi_struct). La salida conserva los nombres de elementos y las anotaciones de atributos del struct. Para XML con sangría, escribe en un quick_xml::Writer configurado con sangría.
Advertisement300 × 250
Advertisement300 × 250