[jdom-interest] Important proposal: Element/Document changes

philip.nelson at omniresources.com philip.nelson at omniresources.com
Tue Jul 25 07:15:01 PDT 2000

I am not overwhelmed by this proposal.  Not because the ideas aren't good,
but because they aren't that much improved over the current api.  I recently
brought two developers who, while experienced programmers (Smalltalk, C++,
VB)had little Java and no XML background.  In less than two weeks time, they
are able to move around JDOM based classes with ease (except for some nasty
NullPointerExceptions =8^( )

> First, on Element:
> String getText()
> String getTextTrim()

Makes sense +1 getTextTrim()
> Element setText(String)
>   The natural replacement for setContent(String).
> Element getChild(String name)
> Element getChild(String name, Namespace ns)
> List getChildren()
> List getChildren(String name)
> List getChildren(String name, Nmespace ns)


> List getMixedContent()
>   Returns the full content of an element, replacing
> getMixedContent(true).  Remove getMixedContent(boolean) 
> because any time
> you're interested in the low-level mixed content you 
> presumably want to
> see all the whitespace nodes, or could at least ignore them yourself. 
> Is that true?  Naming this method getContent() might be nicer but that
> will cause subtle bugs to existing code.  This also makes it clear the
> List may contain various types of objects.

getContent would be better of course.  Fine with all whitespace.  Since the
old getContent returned a String, wouldn't the compiler catch those?

> String getAttributeValue(String name)
> String getAttributeValue(String name, Namespace ns)
>   Returns the given attribute value, avoiding the 
> getAttribute() call. 
> I would have sworn we had this method already, but can't find 
> record of
> it.  It's surely convenient.

I remember fixing "legacy" code with getAttributeValue.  It was decided that
getAttribute().getValue() was just as fast to type.
> Element addContent(String text)
> Element addContent(Element element)
> Element addContent(ProcessingInstruction pi)
> Element addContent(Entity entity)
> Element addContent(Comment comment)

OK but we get text with getText() and set it with addContent() OR setText()?
Or is this ONLY for addContent("<achild>foo</achild>")?  Would this be
enforced? Will setText() only allow plain text? I'm confused

> boolean removeContent(String text)

?? same as above

> boolean removeContent(Element element)
> boolean removeContent(ProcessingInstruction pi)
> boolean removeContent(Entity entity)
> boolean removeContent(Comment comment)

> boolean removeChild(String name)
> boolean removeChild(String name, Namespace ns)
> boolean removeChildren(String name)
> boolean removeChildren(String name, Namespace ns)
I prefer this naming style because it's shorter and less of a change from
what current example code and Brett's book shows.
> Now some methods on Document:
> Document addContent(Element root)
> Document addContent(ProcessingInstruction pi)
> Document addContent(Comment comment)
> Document addContent(Entity entity)   // Do we need this?

Makes sense.  DocType remains the same?  Does setRootElement() and
getRootElement remain?

The rest looks good

More information about the jdom-interest mailing list