Hey Mark,
I'd like to create a subclass of XML::Document. However, I'm having trouble figuring out how I would instantiate my subclass because parsing requires Parser.parse() which returns an XML::Document instead of My::Subclass. Unfortunately, Ruby doesn't have a way of changing the class of an object.
Hmm, interesting question. One approach is what Dan said.
The way the code works now (simplified):
ruby_xml_parser_parse(VALUE self) {
ruby_xml_parser *rxp;
ruby_xml_parser_context *rxpc;
xmlDocPtr xdp;
VALUE doc;
Data_Get_Struct(self, ruby_xml_parser, rxp);
Data_Get_Struct(rxp->ctxt, ruby_xml_parser_context, rxpc);
xmlParseDocument(rxpc->ctxt)
xdp = rxpc->ctxt->myDoc;
return ruby_xml_document_wrap(xdp);
}
The issue is the last line - it takes the libxml document object and
wraps it by creating a new Ruby document object. Somehow that would
have to change to allow the user to specify what document to create.
The most obvious way of doing this is adding a parameter to the parse method that specifies what class to create:
XML::Parser.string('foo').parse(MyCustomDocument) and then also add a parameter to the ruby_xml_document_wrap method. That would be easy to do, but seems a bit kludgy. But I have no better ideas...
Charlie
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ libxml-devel mailing list [email protected] http://rubyforge.org/mailman/listinfo/libxml-devel
