The Dom4JList don't exist... it was only wishfull thinking *smile* Sorry for any confusion it caused!
/Christian > -----Ursprungligt meddelande----- > Fr�n: Soumanjoy Das [mailto:[EMAIL PROTECTED]] > Skickat: den 26 april 2002 05:49 > Till: [EMAIL PROTECTED] > �mne: RE: [dom4j-user] Node List returned by selectNodes() > > > Hi guys, > > I'm a bit clueless here - Christian - where is this > miraculous Dom4jList > that you are talking about (near the end of your message)? If > it is truly > there, it would probably spare a lot of programmers some > headache (although > it wouldn't be too difficult to implement it ourselves - I'd > like to know if > it's already there). And moreover, I have been thinking about > it and I agree > with James that: If one is to extract a list of elements from a DOM > document, and then add an element in the middle, then one had > better fish > out the reference of the node before which one needs to add > the new element > (or its parent): > e.g.: > > import org.w3c.dom.*; > import org.dom4j.dom.*; > > List oNodeList = oDoc.selectNodes("//foo"); > Node oRefNode = (Node)oNodeList.get(3); > > //By the reference of the node itself > Node oGuest = oDoc.createElement("newfoo"); > oDoc.insertBefore(oGuest, oRefNode); //Will become a > preceding sibling of > oRefNode > > //Otherwise, by the reference of the parent node > Node oGuest = oDoc.createElement("newfoo"); > Node oParent = ((Node)oNodeList.get(3)).getParentNode(); > oParent.appendChild(oGuest); //Will become the last sibling > of oRefNode > > Now that James has rectified the bug in insertBefore(), I > think the first > method should be most convenient (I hope James has made sure > that if the > oRefNode happens to be the first child of its parent, then > inserting Before > should make the new node the first child, and not its parent > or something > else). A wrapper class like Christian's Dom4jList may be very > useful if the > 4 methods that he described are indeed implemented in it. > > Well, I think that's probably enough for me to understand > this whole thing. > Thanks to you both for this long comprehensive discussion. > Cheerio > Soumanjoy > > > -----Original Message----- > From: James Strachan [mailto:[EMAIL PROTECTED]] > Sent: Thursday, April 25, 2002 9:49 PM > To: Christian Holmqvist, IT, Posten; [EMAIL PROTECTED] > Subject: Re: [dom4j-user] Node List returned by selectNodes() > > > Hi Christian. > > It could be that we could return an immutable List from the > selectNodes() > method via... > > Collections.unmodifiableList( list ); > > in java.util.Collections. > > > Though so long as the documentation is clear that > modifications to the List > will not be reflected in the document I think I'd rather not > add this extra > complication, both from efficiency and to allow end users to > modify the list > (e.g. to sort the list or filter it further). > > James > > From: "Christian Holmqvist, IT, Posten" > <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Thursday, April 25, 2002 1:41 PM > Subject: SV: [dom4j-user] Node List returned by selectNodes() > > -----Original Message----- > From: Christian Holmqvist, IT, Posten > [mailto:[EMAIL PROTECTED]] > Sent: Thursday, April 25, 2002 6:12 PM > To: [EMAIL PROTECTED] > Subject: SV: [dom4j-user] Node List returned by selectNodes() > > > Scroll dooooown... > > > -----Ursprungligt meddelande----- > > Fr�n: James Strachan [mailto:[EMAIL PROTECTED]] > > Skickat: den 25 april 2002 13:57 > > Till: Christian Holmqvist, IT, Posten; 'Soumanjoy Das'; > > [EMAIL PROTECTED] > > �mne: Re: [dom4j-user] Node List returned by selectNodes() > > > > > > ----- Original Message ----- > > From: "Christian Holmqvist, IT, Posten" > > <[EMAIL PROTECTED]> > > > First I hop you all don't mind if I move this discussion to > > the mailing > > > list, this is far to intreressting not to be included there. > > > > Not at all. > > > > > > From: "Soumanjoy Das" <[EMAIL PROTECTED]> > > > > > Hi James, > > > > > > > > > > This is just a very elementary question where Christian and > > > > I are having > > > > > some confusion. I want to know this so as to clarify my > > > > concepts: When a > > > > > list of nodes is returned by .selectNodes(), and then I add > > > > a Node to the > > > > > List object, does that add the Node to the original > > document too? > > > > > > > > No absolutely not. e.g where should it add it? I could do > > > > > > > > List foos = doc.selectNodes( "//foo" ); > > > > > > > > and find all kinds of different elements. Adding a new node > > > > to the list, > > > > where should it go? > > > > > > > > I agree though maybe it should be readonly - but sometimes > > > > people want to > > > > sort the results and so forth. > > > > > > > > If you want to add to the tree, find a node in the results > > > > you like and add > > > > it to its parent. > > > > > > > > Node node = (Node) foos.get(0); > > > > Element parent = node.getParent(); > > > > parent.addElement( "somethingElse" ); > > > > > > Oki, this is all fine BUT > > > > > > what happens if we do: > > > List foos = doc.selectNodes("//foo"); > > > foos.add(1,doc.createElement("newElement")); > > > doc.setContent(foos); > > > > > > Where does the "newElement" go? > > > > That would kinda work. > > > > Though the problem is the other <foo> elements in the list > could well > > already have different parents - so an exception might well > > occur because > > you're trying to add a node which is already a child of > > another element. > > > > So you could iterate through the list and call node.detach() > > on them to > > prune them from their place in the document, then the above > > would work. > > > > Oh and one more thing to remember; a document can only have 1 > > root element. > > So an exception will occur when trying to add the 2nd element. If > > 'doc.setContent()' were applied on an Element, this would be better. > > So the setContent method should be in the element class and > not the branch > class since setContent takes a list and a list implies more > the one node. > And since the list can not show how the nodes should be added > (level or > order) in relation to eachother. I.e. they are added with > while(list.hasNext()) > { > Node n = (Node)list.next(); > n.detach(); > doc.add(n); > } > > > Ok... but my view of a result from a xpath selection is different. > The result is only a referens list to the elements that is > the result from > the xpath expression. This implies that nothing can be added > to the list > since the elements already contain a order within the > document. Or if there > is adding to be done the position in the document also has to > be specified. > Example xml: (thanks to Soumanjoy for this example xml *smile*) > <Root> > <A> > <B> > <A/> > </B> > </A> > <C> > <A> > <B> > <A/> > </B> > </A> > </C> > </Root> > > Dom4jList foo = doc.selectNodes("//B"); > > There is two nodes in the Dom4jList now. > > The Dom4jList is almost the same as the List class except it > don't support > the > .add(int,object) method instead there is foure other that is directly > working on the document. > > foo.addBefore(0, doc.createElement("X")); > Result: > <Root> > <A> > <X/> > <B> > <A/> > </B> > </A> > <C> > <A> > <B> > <A/> > </B> > </A> > </C> > </Root> > > foo.addAfter(0,doc.createElement("Y")); > Result: > <Root> > <A> > <B> > <A/> > </B> > <Y/> > </A> > <C> > <A> > <B> > <A/> > </B> > </A> > </C> > </Root> > > foo.addInside(0,doc.createElement("Z")); > Result > <Root> > <A> > <B> > <Z/> > <A/> > </B> > </A> > <C> > <A> > <B> > <A/> > </B> > </A> > </C> > </Root> > > foo.addAround(0,doc.createElement("T")); > Result > <Root> > <A> > <T> > <B> > <A/> > </B> > </T> > </A> > <C> > <A> > <B> > <A/> > </B> > </A> > </C> > </Root> > > Ohh well I seems like I floated away again... *hihi* > > /Christian > > _______________________________________________ > dom4j-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/dom4j-user > > _______________________________________________ > dom4j-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/dom4j-user > _______________________________________________ dom4j-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dom4j-user
