[jdom-interest] XPath bindings?

Jason Hunter jhunter at servlets.com
Tue Oct 16 15:51:40 PDT 2001


I agree with Phil pretty much down the line.

+1 on proceeding.

-jh-

philip.nelson at omniresources.com wrote:
> 
> > >It would provide you with the first one.  Not unlike
> > Element.getChild(...)
> > >which provides only the first child with the matching name.
> > >
> >
> > There's no need for this. If somebody knows they only want
> > the first node in the  list, then they can append
> > [position()=1] or even just [1] to the end of the XPath
> > expression to get it. There's no need for a convenience
> > method to get the first node in a list here. It's completely
> > superfluous.
> 
> Not completely.  It would seem kind of silly to have an xpath statement with
> [position()=1] and then have to retrieve it from a list anyway.
> 
> Element theNode = (Element)(selectNodes("/some/xpath[position()=1]").get(1))
> 
> compared to
> 
> Element theNode = (Element) selectSingleNode("/some/xpath[position()=1]")
> 
> Notice also that the first statement could just as easily have had an xpath
> that returned multiple nodes and then missed it because of selecting the
> first one from the list.
> 
> This is also similar to sql statements where you use top or rowcount to when
> you are only interested in a single element.
> 
> >
> > I'm more concerned, however, about programmers who aren't
> > completely comfortable with XPath. If somebody doesn't know
> > they want the first node in the list, but they do know they
> > want only a single node, they're likely to pick
> > getSingleNode() without giving it a lot of thought. They're
> > likely to be surprised by nulls that are returned when the
> > method doesn't return even a single node. They're likely to
> > miss data because they got a single node when what they
> > really needed was a list. I'm afraid this is going to lead to
> > misuse and misunderstanding of XPath.
> 
> As pointed out, this is completely consistent within the JDOM api.
> getChild("name") returns the first matching one or null if there is no
> match.  getChildren returns a List, whether or not there was a match.  I
> really can't remember anyone posting questions about this, so I have to
> think that people "get" it.
> 
> I think that by wrapping Jaxen and SAXPath exceptions in JDOMException, we
> would be consistent again by following the pattern we use in the builders to
> isoloate SAX and DOM exceptions.  We can be completely isolated from Jaxen
> but still take advantage of a very useful and often requested feature.
> 
> And, it will be easy to integrate.  Cool...  I do worry that the use of the
> word "Node" will open a certain smelly can of worms.
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com



More information about the jdom-interest mailing list