Hi again,
thank god, I was being stupid. I can now access the attrs. Monday
morning thinking. I do think that the default attr code may be a bit
broken though.
Gareth
On Mon, 23 Sep 2002, Gareth Reakes wrote:
> Hi,
> what version of xerces are you using? I still cant get any
> attributes if I use the following xml:
>
> <!DOCTYPE greeting SYSTEM "foo.dtd"><greeting xmlns="foo" ls="ping" />
>
> <!ELEMENT greeting EMPTY>
> <!ATTLIST greeting
> ls CDATA #IMPLIED
> xmlns CDATA #IMPLIED >
>
>
> let alone if I have default attrs!! I have now tried this with the CVS
> tree as well as 2.0. I have difficulty in believing that this has not been
> noticed by users as it seems fairly fundamental. Does anyone else see this
> behaviour? If I remove the DOCTYPE then I can access the attributes via
> any of the get methods.
>
> I believe that you are correct in thinking that the default attrs should
> be available through the getAttrs methods. Spec says
>
> "The Attr value as a string, or the empty string if that attribute does
> not have a specified or default value."
>
> All the removing stuff is dealt with properly inside of DOMAttrMap but the
> get stuff is not overridden. If it is agreed that this is the correct
> behaviour then perhaps we should put the code in there.
>
>
> Gareth
>
>
> On Fri, 20 Sep 2002, Erik Rydgren wrote:
>
> > I did some serious debugging and have tracked my problem down to the
> > document cloning process. Everything looks dandy until then except that I
> > can not access the default attributes but at least they are there in
> > DOMElementImpl::fDefaultAttributes.
> > So I modified some fuctions to be able to access the default values.
> >
> > *************************************************************************
> > const XMLCh * DOMElementImpl::getAttribute(const XMLCh *nam) const
> > {
> > static const XMLCh emptyString[] = {0};
> > DOMNode * attr=0;
> >
> > attr=fAttributes->getNamedItem(nam);
> >
> > if (!attr && fAttributes->hasDefaults())
> > attr=fDefaultAttributes->getNamedItem(nam);
> >
> > const XMLCh *retString = emptyString;
> > if (attr != 0)
> > retString = attr->getNodeValue();
> >
> > return retString;
> > };
> > *************************************************************************
> > DOMAttr *DOMElementImpl::getAttributeNode(const XMLCh *nam) const
> > {
> > DOMNode * attr=0;
> > attr=fAttributes->getNamedItem(nam);
> > if (!attr && fAttributes->hasDefaults())
> > attr=fDefaultAttributes->getNamedItem(nam);
> > return (DOMAttr*) attr;
> > };
> > *************************************************************************
> >
> > I'm not sure how the DOM API is supposed to work with default values.
> > Should getAttributes also return default value attributes?
> > If it should, then the solution needs to be modified a bit.
> >
> > I came to realize that a document clone totally removes all default values.
> > How it is supposed to work?
> > Personally I found the new handy function adoptDocument() in the parser so I
> > do not sweat about the cloning problem anymore ( plus that I saved tons of
> > CPU cykles. YES! :o) )
> >
> > Regards
> > Erik Rydgren
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
--
Gareth Reakes, Head of Product Development
DecisionSoft Ltd. http://www.decisionsoft.com
Office: +44 (0) 1865 203192
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]