[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