Expand description
xmlserde is another tool for serializing and deserializing XML. It is designed
for easy and clear use.
Please add these dependencies in your Cargo.toml.
xmlserde = "0.10"
xmlserde_derives = "0.10"§Deserialize
Suppose that XML struct is to be deserialized as below:
<person age="8">
<name>Jeremy</name>
<pet t="cat">Tom</pet>
<pet t="dog">Spike</pet>
</person>You can create a struct and derive the XmlDeserialize from xmlserde_derives, like:
ⓘ
use xmlserde_derives::XmlDeserialize;
#[derive(XmlDeserialize)]
pub struct Person {
#[xmlserde(name = b"age", ty = "attr")]
pub age: u16,
#[xmlserde(name = b"pet", ty = "child")]
pub pets: Vec<Pet>,
}
#[derive(XmlDeserialize)]
pub struct Pet {
#[xmlserde(name = b"t", ty = "attr")]
pub t: String,
#[xmlserde(ty = "text")]
pub name: String,
}In xmlserde, you need to declare clearly that which tag and which type you are going to serde.
Notice that it is a binary string for the name.
§Serialize
As for serializing, you need to derive the XmlSerialize.
§Enum
§For attribute value
Please check in xml_serde_enum section.
§For children element
You can define an enum like this.
ⓘ
#[derive(XmlSerialize, Deserialize)]
pub enum Pet{
#[xmlserde(name = b"dog")]
Dog(Dog),
#[xmlserde(name = b"cat")]
Cat(Cat),
}
pub struct Dog{}
pub struct Cat{}In a field whose type is an enum, we can use ty = untag:
ⓘ
#[derive(XmlSerialize, Deserialize)]
pub struct Person {
#[xmlserde(ty="untag")]
pub pet: Pet,
}In this case, Person can be serialized as
<person>
<dog>
...
</dog>
</person>or
<person>
<cat>
...
</cat>
</person>§Attributes
- name: the tag of the XML element.
- vec_size: creating a vector with the given capacity before deserilizing a element lists.
vec_size=4or if your initial capacity is defined in an attr, you can use like thisvec_size="cnt". - default: assigning a parameter-free function to create a default value for a certain field. Notice that it requires the type of this value impls
Eqand it will skip serializing when the value equals to the default one. - untag: see the
Enumabove.
§Examples
Please see LogiSheets for examples.
Re-exports§
pub use quick_xml;
Macros§
- xml_
serde_ enum - A macro to help you create mappings between string values in XML and Rust enums.
Structs§
- Unparsed
Unparsedkeeps the XML struct and will be serialized to XML with nothing change. It is helpful when you are debugging on deserializeing certain element.
Traits§
Functions§
- xml_
deserialize_ from_ reader - The entry for deserializing.
Tshould have declared therootby#[xmlserde(root=b"")]to tell the deserializer which tag is the start for deserializing. - xml_
deserialize_ from_ str - The entry for deserializing.
Tshould have declared therootby#[xmlserde(root=b"")]to tell the deserializer which tag is the start for deserializing. - xml_
serialize - The entry for serializing.
Tshould have declared therootby#[xmlserde(root=b"")]to tell the serializer the tag name of the root. - xml_
serialize_ with_ decl - The entry for serializing.
Tshould have declared therootby#[xmlserde(root=b"")]to tell the serializer the tag name of the root. This function will add the header needed for a XML file.