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
>
>
>
>
>



Reply via email to