Deserializing tag with attribute values into Map
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start by reading the deserialization handling for internally tagged enums and $value fields, then trace how maps and sequences are populated from XML elements. The issue provides a reproducer with AttrDefChoice, AttrDef, and MultiMap; check whether the map can accept element values alongside the name attribute and add a regression case for that input. Done means the example deserializes successfully into a map, with existing behavior preserved.
Written by the indexing model from the issue text.
Description
Assume we have below xml structure:
<container>
<attr>
<name>Name</name>
<desc>Description</desc>
</attr>
</container>
when <attr> tag doesn't have attribute values, quick-xml parses successfully into Map (HashMap, MultiMap)
Container ( "attr" : { Name(Name), Desc(Description) } )
#[derive(Deserialize, PartialEq)]
pub enum AttrDefChoice {
Name(String),
Desc(String),
}
#[derive(Deserialize, PartialEq)]
pub enum ContainerDef {
Container(MultiMap<String, AttrDefChoice>),
}
but when <attr> have name value I need some wrapper struct with rename = "$value". In that case it works only with attr: Vec<AttrDefChoice>.
<container>
<attr name="AttrName">
<name>Name</name>
<desc>Description</desc>
</attr>
</container>
...
#[derive(Deserialize, PartialEq)]
pub struct AttrDef {
name: String,
#[serde(rename = "$value")]
attr: MultiMap<String, AttrDefChoice>,
}
invalid type: string "Name", expected internally tagged enum AttrDefChoice
Is there any way to achieve parsing of tags with values into Map?
- Dominant language
- Rust
- Stars
- 1.6k
- Forks
- 299
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 9
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from tafia/quick-xml
-
Parser accepts an empty element or attribute namePossibly taken @ychampion claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Maintainers usually reply within 1 day
-
DecodingReader::set_encoding panics when the XML declaration is longer than 64 bytesPossibly taken @emschwartz claimed this 4 days ago. Openbug encoding
Difficulty 4/5 3-5 days Newbie friendliness 30/100
tafia/quick-xml#1040 · 1 comment ·
Maintainers usually reply within 1 day
-
encoding optimization
Difficulty 4/5 3-5 days Newbie friendliness 55/100
tafia/quick-xml#1039 · 1 comment ·
Maintainers usually reply within 1 day
-
optimization question
Difficulty 4/5 3-5 days Newbie friendliness 52/100
Maintainers usually reply within 1 day
-
enhancement
Difficulty 4/5 1-2 days Newbie friendliness 53/100
tafia/quick-xml#1035 · 1 comment ·
Maintainers usually reply within 1 day
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
storytold/photocraft#14822 ·
Maintainers usually reply within 1 day
-
bug css
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
dginev/latexml-oxide#853 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 2 days
-
[Bug] export_build_environment admits its output directory only after the export ran in the build computerPossibly taken @viniciusdsandrade claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day