RE: [xml-dev] code challenge

From
Paul Brown <>
To
Xml-Dev <>
Date
2002-08-09T14:39:22Z
ID
<>
Thread
RE: [xml-dev] code challenge
> [ Danny Ayers [mailto:] ]
> Paul Brown sent me a way of getting rid of the global that 
> should work, just lugging the list along for every call :
> public ArrayList getElements(Document d) {
>   return getElements(d.getDocumentElement(),new ArrayList(Collections.singleton(d.getDocumentElement()));
> }

I'm a C programmer at heart.  You see a Java object, I see a pointer...

> 05>     if (next.getNodeType() == Node.ELEMENT_NODE) {
> 06>       getElements(e,l).add(e);
> 07>     }

Well, this won't work either (it should be adding next, not e), but I have the excuse of having written the code in my phone's email client.

This will work (and is shorter, although I added some linebreaks for style purposes):

  public List getElements(Document d) {
    return getElements(
      d.getDocumentElement(),
      new ArrayList(Collections.singleton(d.getDocumentElement()))
    );
  }
  
  private final List getElements(Node e, final List l) {
    for (Node next = e.getFirstChild();next != null;next = next.getNextSibling()) {
      if (next.getNodeType() == Node.ELEMENT_NODE) {
        getElements(next,l).add(next);
      }
    }
    return l;
  }

That said, I'm assuming that we can do a Riserva from 1997 or 1998?  

Cheers,

Paul