Because this attribute may occur in random places, it makes no sense
failing on it. We discard it after attribute processing though, so it
can still be captured by structs which are explicitly interested in it.
@@ -396,7 +396,11 @@ impl Compound {
}
}
- let mut discard_attr = TokenStream::default();
+ // We always implicitly discard the `xml:lang` attribute. Its
+ // processing is handled using the `#[xml(language)]` meta.
+ let mut discard_attr = quote! {
+ let _ = #attrs.remove(::xso::exports::rxml::Namespace::xml(), "lang");
+ };
for (xml_namespace, xml_name) in self.discard_attr.iter() {
let xml_namespace = match xml_namespace {
Some(v) => v.to_token_stream(),
@@ -12,6 +12,11 @@ Version NEXT:
This change overall allows for more flexibility in the implementation
of text codecs.
+ - `xml:lang` attributes are now silently discarded during
+ deserialisation unless captured by `#[xml(attribute = "xml:lang")]` or
+ equivalent. This is because `xml:lang` is special as per
+ XML 1.0 § 2.12 and it is generally preferable to allow it to occur
+ anywhere in the document.
* Added
- Support for child elements in derive macros. Child elements may also
be wrapped in Option or Box or in containers like Vec or HashSet.