Re: XmlPullParser.getAttributeValue( )

Aleksander Slominski <[email protected]> Tue, 04 Mar 2003 15:49:31 -0500
Newsgroups gmane.text.xml.xmlpull.devel
Message-ID <[email protected]>
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
 


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get 128 Bit SSL Encryption!
http://us.click.yahoo.com/LIgTpC/vN2EAA/xGHJAA/2U_rlB/TM
---------------------------------------------------------------------~->

To unsubscribe from this group, send an email to:
[email protected]

 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/