Hi, Franck.

"Schmidlin, Franck" <[EMAIL PROTECTED]> wrote on 2006-05-22 
05:40:05 AM:
> The function looks like:
> 
>     public static org.w3c.dom.traversal.NodeIterator tokenize(
>         org.apache.xalan.extensions.ExpressionContext iContext, 
>         String istrValue, 
>         String istrSeparator)
>     throws javax.xml.transform.TransformerException
>     {
>         org.apache.xpath.NodeSet result = new
> org.apache.xpath.NodeSet();
>         org.w3c.dom.Document dom =
> com.anite.connect.utility.XML.newDocument();
> 
>         if(istrValue != null || istrSeparator != null)
>         {
>             java.util.StringTokenizer tokenizer = 
>                 new java.util.StringTokenizer(istrValue, istrSeparator);
> 
>             while(tokenizer.hasMoreElements())
>             {
> 
> result.addNode(dom.createTextNode(tokenizer.nextToken()));
>             }
>         }
>         return result;
>     } 
> 
> if I use it in a for each statement, the context seems to point to
> nothing (i.e. <xsl:copy-of select="/"/> returns nothing, and my
> apply-templates returns nothing) :

It's not entirely clear what result you are expecting.  It's always best 
to include a complete, stand-alone test case along with the expected 
output.  The text nodes that you are creating are not part of a DOM tree, 
so when your stylesheet evaluates the XPath expression "/" with one of 
those text nodes as the context node, the result is the root node for the 
text node, which is an empty node set in this case.

If you want the result of evaluating "/" to be the Document node returned 
by com.anite.connect.utility.XML.newDocument(), you can try adding the new 
text nodes in an appropriate place in that DOM tree.

If you want the result of evaluating "/" to be the root node of the 
original input document, you can use variables to work with the two 
different contexts.  For example,

  <xsl:variable name="inputRoot" select="/"/>
  <xsl:for-each select="java:MyXslt.tokenize(
            string(/message//request_summary/TaskList),',')">
    <xsl:comment>Task ID: <xsl:value-of select="."/></xsl:comment>
    <xsl:comment><xsl:copy-of select="$inputRoot"/></xsl:comment>
    <xsl:apply-templates
        select="$inputRoot/message/message_body/opti:DataSet1" >
      <xsl:with-param name="taskId" select="."/>
    </xsl:apply-templates>
  </xsl:for-each> 

I hope that helps.

Thanks,

Henry
------------------------------------------------------------------
Henry Zongaro      Xalan development
IBM SWS Toronto Lab   T/L 969-6044;  Phone +1 905 413-6044
mailto:[EMAIL PROTECTED]

Reply via email to