rust-libxml icon indicating copy to clipboard operation
rust-libxml copied to clipboard

missing ability to get all attributes including namespace

Open faassen opened this issue 2 years ago • 3 comments

Consider this:

<foo xmlns:ns="http://example.com" bar="BAR" ns:bar="NS BAR" />

How can I find out that attributes bar and ns:bar both exist?

The Node API offers get_attributes which returns a HashMap with all attributes, but this loses namespace information and I only get bar once.

I can access individual attributes by namespace using get_attribute_ns, but I have no way to find out which attributes exist in the first place. I would expect something like get_attributes_ns which returns a vec of Node (of type AttributeNode, like what is returned by get_attribute_node) in order to find this out. Or alternatively a get_attribute_names_ns which gives a vec of attribute name, attribute namespace tuples.

Am I missing something or this is something the API doesn't implement yet?

faassen avatar Nov 29 '22 15:11 faassen

Am I missing something or this is something the API doesn't implement yet?

I think the namespace support is lacking in the current wrapper, so this would need a new method, likely get_attributes_ns, as you suggest.

dginev avatar Nov 29 '22 15:11 dginev

I needed the same and have implemented it with the signature

pub fn get_properties_ns(&self) -> HashMap<(Option<Namespace>, String), String>

For my use case, I have implemented PartialEq and Hash for Namespace using the methods get_prefix and get_href rather than ns_ptr.

Shall I create a pull request? Or do you have a different signature or implementation in mind?

anwaralameddin avatar Feb 23 '24 22:02 anwaralameddin

@anwaralameddin your suggestion sounds reasonable to me. I'm happy to accept such a PR!

dginev avatar Feb 23 '24 23:02 dginev