You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xalan.apache.org by Al Byers <by...@hotmail.com> on 2002/01/17 12:14:46 UTC

Returning foreign nodesets from an extension call

I read in the documentation that one uses the NodeSet class to return a 
nodeset to the transformer if you want to change the input list. Is it 
possible to change the contents or attributes of the input nodelist and send 
it back. I have had no luck. When I try to add an attribute or a new element 
to the input nodeset, it bombs. Here is my scratch code:

    public NodeSet testext2(NodeList pNodeList){
        int i=0;
        NodeSet lNodeSet3    = new NodeSet();
        Node lNode  = (Node)pNodeList.item(0);
        NodeList lNL2       = lNode.getChildNodes();
        int iLen            = lNL2.getLength();
       Node lNode2  = null;
       Element lElem4   = null;
       Attr lAttr   = null;
       int iType;
       for( i=0; i<iLen; i++)
       {
           lNode2   = (Node)lNL2.item(i);
            iType    = lNode2.getNodeType();
           if(iType == Node.ELEMENT_NODE)
           {
               lElem4   = (Element)lNode2;
               //
               // This code works if the following line is commented out.
               //
               lElem4.setAttribute("test", "junk");
               lNodeSet3.addNode(lElem4);
           }
           System.out.println("Size:" + lNodeSet3.size());
       }

        Node lNode4  = null;
        Document lDocOut    = _DBuilder.newDocument();
        Document lDocIn     = lNode.getOwnerDocument();
        Element lElem       = lDocOut.createElement("test");
        Element lElem2       = lDocOut.createElement("test2");
        Element lElem3       = lDocOut.createElement("test3");
        lElem.appendChild(lElem2);
        lElem.appendChild(lElem3);
        lDocOut.appendChild(lElem);
        //Node lNodeImported = lDocIn.importNode(lElem, true);
        //lNode.appendChild(lNodeImported);
         NodeSet lNodeSet4    = new NodeSet();
         Element lElemDoc   = lDocOut.getDocumentElement();
         NodeList lNL4      = lElemDoc.getChildNodes();
         iLen            = lNL2.getLength();
        lNode2  = null;
       for( i=0; i<iLen; i++)
       {
           lNode2   = (Node)lNL4.item(i);
           if(lNode2 != null )
           {
                iType    = lNode2.getNodeType();
                if(iType == Node.ELEMENT_NODE)
                {
                      //
                      // The following line throws an exception
                      //
                    lNode4  = lDocIn.importNode(lNode2,true);
                    lNodeSet4.addNode(lNode4);
                }
                System.out.println("Size:" + lNodeSet4.size());
           }
       }

        return lNodeSet3; // or lNodeSet4
    }




_________________________________________________________________
Join the world’s largest e-mail service with MSN Hotmail. 
http://www.hotmail.com


RE: Returning foreign nodesets from an extension call

Posted by Gary L Peskin <ga...@firstech.com>.
What does the stack trace from the exception look like?

Gary

> -----Original Message-----
> From: Al Byers [mailto:byersa@hotmail.com] 
> Sent: Thursday, January 17, 2002 3:15 AM
> To: xalan-j-users@xml.apache.org
> Subject: Returning foreign nodesets from an extension call
> 
> 
> I read in the documentation that one uses the NodeSet class 
> to return a 
> nodeset to the transformer if you want to change the input 
> list. Is it 
> possible to change the contents or attributes of the input 
> nodelist and send 
> it back. I have had no luck. When I try to add an attribute 
> or a new element 
> to the input nodeset, it bombs. Here is my scratch code:
> 
>     public NodeSet testext2(NodeList pNodeList){
>         int i=0;
>         NodeSet lNodeSet3    = new NodeSet();
>         Node lNode  = (Node)pNodeList.item(0);
>         NodeList lNL2       = lNode.getChildNodes();
>         int iLen            = lNL2.getLength();
>        Node lNode2  = null;
>        Element lElem4   = null;
>        Attr lAttr   = null;
>        int iType;
>        for( i=0; i<iLen; i++)
>        {
>            lNode2   = (Node)lNL2.item(i);
>             iType    = lNode2.getNodeType();
>            if(iType == Node.ELEMENT_NODE)
>            {
>                lElem4   = (Element)lNode2;
>                //
>                // This code works if the following line is 
> commented out.
>                //
>                lElem4.setAttribute("test", "junk");
>                lNodeSet3.addNode(lElem4);
>            }
>            System.out.println("Size:" + lNodeSet3.size());
>        }
> 
>         Node lNode4  = null;
>         Document lDocOut    = _DBuilder.newDocument();
>         Document lDocIn     = lNode.getOwnerDocument();
>         Element lElem       = lDocOut.createElement("test");
>         Element lElem2       = lDocOut.createElement("test2");
>         Element lElem3       = lDocOut.createElement("test3");
>         lElem.appendChild(lElem2);
>         lElem.appendChild(lElem3);
>         lDocOut.appendChild(lElem);
>         //Node lNodeImported = lDocIn.importNode(lElem, true);
>         //lNode.appendChild(lNodeImported);
>          NodeSet lNodeSet4    = new NodeSet();
>          Element lElemDoc   = lDocOut.getDocumentElement();
>          NodeList lNL4      = lElemDoc.getChildNodes();
>          iLen            = lNL2.getLength();
>         lNode2  = null;
>        for( i=0; i<iLen; i++)
>        {
>            lNode2   = (Node)lNL4.item(i);
>            if(lNode2 != null )
>            {
>                 iType    = lNode2.getNodeType();
>                 if(iType == Node.ELEMENT_NODE)
>                 {
>                       //
>                       // The following line throws an exception
>                       //
>                     lNode4  = lDocIn.importNode(lNode2,true);
>                     lNodeSet4.addNode(lNode4);
>                 }
>                 System.out.println("Size:" + lNodeSet4.size());
>            }
>        }
> 
>         return lNodeSet3; // or lNodeSet4
>     }
> 
> 
> 
> 
> _________________________________________________________________
> Join the world's largest e-mail service with MSN Hotmail. 
> http://www.hotmail.com
>