[Home] [By Thread] [By Date] [Recent Entries]

  • To: "Xml-Dev" <xml-dev@l...>
  • Subject: RE: code challenge
  • From: "Paul Brown" <prb@f...>
  • Date: Fri, 9 Aug 2002 10:39:22 -0400
  • Cc: "Danny Ayers" <danny666@v...>,"Jeff Lowery" <jlowery@s...>
  • Thread-index: AcI/iHk25i79b363Rp6xvTAlLbSlogAIM8JQ
  • Thread-topic: code challenge


> [ Danny Ayers [mailto:danny666@v...] ]
> 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 

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member