in reply to Re: Is it a bad idea to subclass XML::LibXML ?
in thread Is it a bad idea to subclass XML::LibXML ?

Thanks for your reply, John.

Yes, I thought about implementing my objects as wrappers around XML::LibXML::Element objects. However, the problem is that I need to be able to link my objects into a hierarchical structure, and then export that structure into an XML document that reflects the structure of this hierarchy. And, of course, to re-import the XML document by parsing it with the XML::LibXML::Parser, which would build a DOM tree. I would then bless the DOM objects into my classes, magically re-creating the hierarchy of my application's data... (can you see how beautiful it is?) The simplest way to accomplish this is to have my objects be the DOM objects themselves, and use the DOM tree's structure to represent my application's structure.

To wrap the DOM objects would be to require that I link the wrapper objects together to represent my application's structure, and then to link their underlying DOM objects in parallel. This would be a lot of duplication, as well as complexity in keeping the two sets of links consistent. Unfortunately, I might be stuck using a solution like this. It's either that, or revert to using XML::DOM (for which my subclassing scheme worked, but which is sub-optimal for other reasons).

Thanks again,
-brian

  • Comment on Re: Re: Is it a bad idea to subclass XML::LibXML ?

Replies are listed 'Best First'.
Re: Re: Re: Is it a bad idea to subclass XML::LibXML ?
by raptnor2 (Beadle) on May 13, 2004 at 01:43 UTC
    I posted a new module called IOC::Lite last week that contains a class that may be useful to you. It's called IOC::Lite::Adaptor. This class's job is to pretend to be another object while providing the means to add methods to it at runtime. It will be greatly enhanced in my next release (due out this weekend), but the current one may help you now (at least in concept).

    Cheers,

    John

      Hello John,

      If I understand correctly, that might suit my purpose. Does it just AUTOLOAD its methods, and then dispatch the method calls that you don't implement in your subclasses to the contained object?

      What I have done in the mean time is to store the subclass name in the XML::LibXML::Element objects as an attribute, and then use that to bless the references returned by my lookup routine (which is just a wrapper around findnodes() that does the bless()ings). Unfortunately this is a little bit inefficient when findnodes() returns a large nodelist, but it works, and it seems to perform reasonably well for my application. I think that your solution is cleaner, and will most likely perform better. I'll take a look at it.

      Thanks,
      -brian

        Yes, it just autoloads the methods that it doesn't implement. I did it out of laziness, but I can now see other uses for it. I'm working on a more generalized version for the next release. The current class will stay the same (parent will change).

        Cheers,

        John