Correctly add namespaced attributes to elements
Instead of adding the local_name of an attribute, if a prefix exists,
add prefix:local_name to allow users to retrieve it via the namespaced
key name.
For example, with this XML:
```
<?xml version="1.0" encoding="utf-8"?>
<root xml:lang="en" >
</root>
```
`root.attr("xml:lang").unwrap()` will now correctly return "en".
`root.attr("lang")` will not retrieve "xml:lang" value anymore.
This is a breaking change.
Fixes #2
This commit is contained in:
parent
8f027cfee2
commit
6f0e88b25b
2 changed files with 30 additions and 3 deletions
|
|
@ -197,7 +197,15 @@ impl Element {
|
|||
match e {
|
||||
ReaderEvent::StartElement { name, attributes, namespace } => {
|
||||
let attributes = attributes.into_iter()
|
||||
.map(|o| Attribute::new(o.name.local_name, o.value))
|
||||
.map(|o| {
|
||||
Attribute::new(
|
||||
match o.name.prefix {
|
||||
Some(prefix) => format!("{}:{}", prefix, o.name.local_name),
|
||||
None => o.name.local_name
|
||||
},
|
||||
o.value
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
let ns = if let Some(ref prefix) = name.prefix {
|
||||
namespace.get(prefix)
|
||||
|
|
@ -205,6 +213,7 @@ impl Element {
|
|||
else {
|
||||
namespace.get(NS_NO_PREFIX)
|
||||
}.map(|s| s.to_owned());
|
||||
|
||||
let mut root = Element::new(name.local_name, ns, attributes, Vec::new());
|
||||
root.from_reader_inner(reader)?;
|
||||
return Ok(root);
|
||||
|
|
@ -223,7 +232,15 @@ impl Element {
|
|||
match e {
|
||||
ReaderEvent::StartElement { name, attributes, namespace } => {
|
||||
let attributes = attributes.into_iter()
|
||||
.map(|o| Attribute::new(o.name.local_name, o.value))
|
||||
.map(|o| {
|
||||
Attribute::new(
|
||||
match o.name.prefix {
|
||||
Some(prefix) => format!("{}:{}", prefix, o.name.local_name),
|
||||
None => o.name.local_name
|
||||
},
|
||||
o.value
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
let ns = if let Some(ref prefix) = name.prefix {
|
||||
namespace.get(prefix)
|
||||
|
|
|
|||
Loading…
Reference in a new issue