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
>