Hi Mark,
No, you don't need to clone anything. If you're trying to turn the entire
result tree fragment into a node-set, you can take a look at what's going
on in the node-set extension function. The source file is
xml-xalan/c/src/xalanc/XalanExtensions/FunctionNodeSet.cpp.
However, if I understand you code correctly, the following is the
equivalent of what you were doing before:
theNodeList->addNode(&(*it).second->rtree());
The node set doesn't own any of the nodes and won't clean them up when it's
destroyed.
Thanks!
Dave
|---------+--------------------------->
| | "Mark Weaver" |
| | <[EMAIL PROTECTED]|
| | > |
| | |
| | 04/08/2004 04:33|
| | AM |
| | Please respond |
| | to xalan-c-users|
|---------+--------------------------->
>--------------------------------------------------------------------------------------------------------------------------|
|
|
| To: <[email protected]>
|
| cc: (bcc: David N Bertoni/Cambridge/IBM)
|
| Subject: RE: rtree()->getNodesetRoot()
|
>--------------------------------------------------------------------------------------------------------------------------|
> It disappeared becaue the "shadow" root document fragment disappeared,
> which was a quick-and-hacked implementation and caused no end of trouble.
>
> Our ResultTreeFrag specialization of XalanDocumentFragment also
> disappeared, as it was offering no value and just created complications.
>
> The real "root" is now the result tree fragment itself. Is there any
> reason why that won't work?
>
I'm just not sure how I add this to a nodeset. Do I have to clone it?
theNodeList->addNode((*it).second->rtree().cloneNode( false ));
Should the deep flag be set? Does the nodelist then own (and therefore
ultimately cleanup) the cloned tree?
Thanks,
Mark
> Dave
>
>
>
> |---------+--------------------------->
> | | "Mark Weaver" |
> | | <[EMAIL PROTECTED]|
> | | > |
> | | |
> | | 04/07/2004 05:26|
> | | AM |
> | | Please respond |
> | | to xalan-c-users|
> |---------+--------------------------->
>
> >-----------------------------------------------------------------
> ---------------------------------------------------------|
> |
> |
> | To: "Xalan-C-Users"
> <[email protected]>
> |
> | cc: (bcc: David N Bertoni/Cambridge/IBM)
> |
> | Subject: rtree()->getNodesetRoot()
> |
>
> >-----------------------------------------------------------------
> ---------------------------------------------------------|
>
>
>
> I've recently moved up to Xalan 1.7 and it seems that the
getNodeSetRoot()
> function has disappeared from XalanDocumentFragment. This was used in
one
> of my (nasty) extension functions that implements a dictionary.
>
> Basically, I'm trying to stick the RTF to a nodeset in the following
code:
>
> dictionary_t::iterator it =
> m_dic.find(arg1->str().data());
>
> XPathExecutionContext::BorrowReturnMutableNodeRefList
> theNodeList(executionContext);
> if (it != m_dic.end()) {
>
> theNodeList->addNode((*it).second->rtree().getNodesetRoot());
> }
> return
> executionContext.getXObjectFactory().createNodeSet(theNodeList);
>
> the idea being that the nodeset is empty if the dictionary key
> could not be
> found or contains the node otherwise. (There's also a corresponding
> function to return all of the nodes).
>
> Could anyone advise as to the correct way to do this these days?
>
> Thanks,
>
> Mark
>
>
>
>
>