Naresh Bhatia wrote:
> I need some clarification on
> XmlPullParser.getAttributeValue(java.lang.String namespace,
> java.lang.String name). My schema is as follows:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsd:schema
> targetNamespace="http://www.user.org/user-schema"
> xmlns="http://www.user.org/user-schema"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified"
> attributeFormDefault="unqualified">
>
> <xsd:complexType name="User">
> <xsd:sequence>
> <xsd:attribute name="username" type="xsd:string"/>
> <xsd:attribute name="password" type="xsd:string"/>
> </xsd:sequence>
> </xsd:complexType>
>
you have selected |unqualified for attribute names and that means that
|locally declared must be unqualified ie. without targetNamespace AFAIR
> <xsd:element name="user" type="User"/>
> </xsd:schema>
>
> My instance is as follows:
>
> <user
> xmlns="http://www.user.org/user-schema"
> username="john" password="john"/>
>
> I was expecting to get the username attribute as follows:
>
> parser.getAttributeValue("http://www.user.org/user-schema",
> "username");
>
> However xpp3 did not like the namespace parameter: I set it to null
> and even that did not work. Finally it worked with the following change:
>
> parser.getAttributeValue("", "username");
>
> Is this the expected behavior?
>
yes as you have attributes form defaulted to unqualified so there is no
namespace.
> Why?
>
if you want attributes to be present in some namespace you need to
explicitly declare them in that namespaces as xmlns='...' does not apply
to attributes: checking Namespaces in XML
(http://www.w3.org/TR/REC-xml-names/) reading section 5.2 Namespace
Defaulting "Note that default namespaces do not apply directly to
attributes."
as solution rewrite your XML to not use default namespace so attributes
can be declared in namespaces:
<u:user
xmlns:u="http://www.user.org/user-schema"
u:username="john" u:password="john"/>
and you will get results you expect.
HTH
alek