[studxml-users] namespace, prefix & xsi attr

Maxim Maslennikov maxim.maslennikov at gmail.com
Mon Feb 23 16:22:36 EST 2015


Boris,

Thank you a lot for the explanation and advice!

Best Regards,
Maxim Maslennikov
Moscow Russia
+7 985 274-05-70

> On Feb 23, 2015, at 4:21 PM, Boris Kolpackov <boris at codesynthesis.com> wrote:
> 
> Maxim Maslennikov <maxim.maslennikov at gmail.com> writes:
> 
>> Could you explain how to parse and serialize following root element:
>> 
>> <t:root xmlns:t='test'
>>        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
>>        xsi:schemaLocation='test test.xsd'>
>> 
>> I’m able to parse:
>> 
>> p.next_expect(parser::start_element, "test", "root", content::complex);
>> string namespace_ = p.namespace_();
>> string name = p.name();
>> string prefix = p.prefix();
> 
> From <xml/parser>:
> 
> const std::string&
> attribute (const qname_type& qname) const;
> 
> template <typename T>
> T
> attribute (const qname_type& qname) const;
> 
> std::string
> attribute (const qname_type& qname,
>           const std::string& default_value) const;
> 
> template <typename T>
> T
> attribute (const qname_type& qname, const T& default_value) const;
> 
> bool
> attribute_present (const qname_type& qname) const;
> 
> So:
> 
> string schema_location =
>  p.attribute (qname ("http://www.w3.org/2001/XMLSchema-instance",
>                      "schemaLocation"));
> 
>> And serialize:
>> s.start_element( namespace_, name );
>> s.namespace_decl( namespace, prefix );
> 
> From <xml/serializer>:
> 
> void
> attribute (const qname_type& qname, const std::string& value);
> 
> template <typename T>
> void
> attribute (const qname_type& qname, const T& value);
> 
> void
> attribute (const std::string& ns,
>           const std::string& name,
>           const std::string& value);
> 
> template <typename T>
> void
> attribute (const std::string& ns,
>           const std::string& name,
>           const T& value);
> 
> And:
> 
> // Namespaces declaration. If prefix is empty, then the default
> // namespace is declared. If both prefix and namespace are empty,
> // then the default namespace declaration is cleared (xmlns="").
> //
> void
> namespace_decl (const std::string& ns, const std::string& prefix);
> 
> So:
> 
> s.namespace_decl ("http://www.w3.org/2001/XMLSchema-instance", "xsi");
> s.attribute ("http://www.w3.org/2001/XMLSchema-instance",
>             "schemaLocation",
> 	     "test test.xsd");
> 
> Moral of the story: don't be afraid to look into the API headers, it's
> all in there.
> 
> Boris



More information about the studxml-users mailing list