Env:
W2K, J2SDK 1.4.2_03 (bundled Xalan Java 2.4.1), Eclipse 3.0

A saved node:
<xsl:for-each select="child::s:menuItem">
   ...
   <xsl:copy-of select="menuNodes:addNode($newTreePath,.)" />
   <!-- $newTreePath: a ref string -->
<xsl:for-each>

Can be retrieved only once:
<xsl:for-each select="menuNodes:getNode(0)">
   text[getNode(0)-1]:[<xsl:value-of select="s:text" />]<br/>
</xsl:for-each>

<xsl:for-each select="menuNodes:getNode(0)">
   text[getNode(0)-2]:[<xsl:copy-of select="s:text" />]<br/>
</xsl:for-each>
The second test (<xsl:for-each select�) does not retrieve anything.


Where (menuNodes: ) :

public DTMNodeIterator getNode(int nodeIdx) {
   return ((MsMenuNode)menuNodes.get(nodeIdx)).node;
}

public void addNode(String menuPath, Object nodeObject) {
   if (nodeObject instanceof DTMNodeIterator) {
      DTMNodeIterator node = (DTMNodeIterator) nodeObject;
      menuNodes.add(new MsMenuNode(menuPath, node));
   } else {
      throw new RuntimeException("NOT_IMPLEMENTED");
   }
}

Vector menuNodes;

private class MsMenuNode {
   String menuPath;
   DTMNodeIterator node;

   MsMenuNode(String menuPath, DTMNodeIterator node) {
      this.menuPath = menuPath;
      this.node = node;
   }
}

I tried clone and cloneWithReset as well:

public DTMNodeIterator getNode(int nodeIdx) {
                
   DTMIterator newIterator;
   DTMNodeIterator di = ((MsMenuNode) menuNodes.get(nodeIdx)).node;

   try {
      newIterator = (DTMIterator) di.getDTMIterator().cloneWithReset();
   } catch (CloneNotSupportedException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
   }
   return new DTMNodeIterator(newIterator); 
}


The Java code does not affect main translation. The test:
<xsl:template match="*//s:menuItem">
   text:<xsl:value-of select="s:text"/><br/>
</xsl:template>
properly returns all "text" values at any time.


I have notoiced changes in DTMNodeIterator:
   XNodeSet dtm_iter;
      dtm_iter.m_last;
      dtm_iter.m_next;
have been incremented by one, every time XSLT code:
   <xsl:for-each select="menuNodes:getNode(0)">
      text[getNode(0)-1]:[<xsl:value-of select="s:text" />]<br/>
   </xsl:for-each>
has been executed, even "newIterator" has been cloned (w/wo reset).
   newIterator = (DTMIterator) di.getDTMIterator().cloneWithReset();


Is it possible to do a deep clone, or there is another way to preserve a node.

Tnx,
Vk





_______________________________________________
Join Excite! - http://www.excite.com
The most personalized portal on the Web!

Reply via email to