Ciao, 
non sono proprio un novellino di Java, ma ho un problema alquanto assurdo.
Questo è il codice della mia funzione:
/**
	 * Contiene il testo piatto senza tag e senza spaziature errate.
	 */
	private static String result = "";
	
	/**
	 * Contiene le informazioni sui tag. Nome, PosizioneApertura e PosizioneChiusura
	 */
	private static XMLDocumentTagInformation tag;
	
	private static void getFullText(NodeList NL){
		Node tmpNode = null;
		NodeList tmpList = null;
		tag = new XMLDocumentTagInformation();
		
		// Scandisco la lista dei Nodi fornita in ingresso 
		for(int i=0;i<NL.getLength();i++){
			
			tmpNode = NL.item(i);
			
			
			if(tmpNode.hasChildNodes()){
				// Se il nodo ha figli ne recupero la lista.
				tmpList = tmpNode.getChildNodes();
				
				// Stampa di DEBUG
				System.out.print(tmpNode.getNodeName()+" -> Ha figli! (Posizione: "+result.length()+", lunghezza: "+getTextLength(tmpNode)+")\n------\n\n");
				// Mi salvo:	 il nome del nodo, 					la posizione nel testo	   e	la lunghezza del nodo.
				tag.addTag(tmpNode.getParentNode().getNodeName(),	 result.length(), 				getTextLength(tmpNode));
				
				//Richiamo *ricorsivamente* la funzione sul resto del "documento"
				getFullText(tmpNode.getChildNodes());
			}
			// Se e' un nodo di testo ne ricavo il contenuto pulendolo da imperfezioni (spazi multipli, ritorni a capo ecc..)
			if(tmpNode.getNodeType() == Node.TEXT_NODE){
				String tmp = Utils.cleanStr(tmpNode.getTextContent());
				
				// Mi salvo il contenuto solo se e' "sostanzioso"
				if(tmp.trim().length() > 0)
					result +=tmp;
				
				// Stampa di DEBUG
				//System.out.println("Ha testo:\n"+tmp+"\n");
			}			
		}
	}
	
	
	
	private static int getTextLength(Node N) {
		return Utils.cleanStr(N.getTextContent()).length();
	}
mentre questa è la mia classe 
XMLDocumentTagInformation
package cs.ltw.server.util;
import java.util.HashMap;
import java.util.Vector;
public class XMLDocumentTagInformation {
	
	private HashMap<Integer, String>	tagNames;
	private Vector<Integer>				tagOpenPos;
	private Vector<Integer>				tagClosePos;
	
	public XMLDocumentTagInformation(){
		super();
		
		this.tagNames		= new HashMap<Integer, String>();
		this.tagOpenPos		= new Vector<Integer>();
		this.tagClosePos	= new Vector<Integer>();
	}
	
	
	public Integer addTag(String name, Integer open, Integer close){
		
		tagNames.put(tagNames.size(), name);
		
		tagOpenPos.add(open);
		tagClosePos.add(close);
		
		return tagNames.size()-1;
	}
	
	public String toString(){
		
		if(tagNames.size() == 0)
			return "{ null }";
		
		String result = "{";
		for(int i=0;i<tagNames.size();i++){
			result += i +":";
			result += tagNames.get(i) +"(";
			
			result += tagOpenPos.get(i) +"-";
			result += tagClosePos.get(i) +"), ";
		}
		
		result.substring(0, result.length()-2);
		result += "}";
		
		return result;
	}
}
Chiamando la funzione 
getFullText su una lista di nodi ricavata con XPath, succede una cosa assai strana.
Su consolle mi stampa esattamente ciò che mi aspetto!
 Ovvero: nome del nodo, posizione nel testo e lunghezza del nodo. Mentre quando è ora di aggiungere questi valori all'oggetto 
tag (un istanza di XMLDocumentTagInformation) non mi aggiunge assolutamente nulla...
Infatti se vado a stampare tag alla fine della computazione mi stampa "{ null }".
Cosa ancora piu strana se io sposto la riga:
// Mi salvo:	 il nome del nodo, 					la posizione nel testo	   e	la lunghezza del nodo.
				tag.addTag(tmpNode.getParentNode().getNodeName(),	 result.length(), 				getTextLength(tmpNode));
all'inizio del for mi aggiunge 
soltanto 5 nodi: l'ultimo, ed a scalare i primi 4.. (Ultimo, 4°, 3°, 2°, 1°)
IDEE??
PS: Se notate nella stampa a video uso 
tmpNode.getNodeName() mentre nel'aggiunta all'oggetto "
tag" uso invece 
mpNode.getParentNode().getNodeName(). Questo perchè se tento di aggiungere con lo stesso comando con cui stampo mi aggiunge tutti i nodi con nome 
#text invece che col loro vero nome.
Esempio di output:
text -> Ha figli! (Posizione: 0, lunghezza: 8040)
------
body -> Ha figli! (Posizione: 0, lunghezza: 8040)
------
div1 -> Ha figli! (Posizione: 0, lunghezza: 8040)
------
head -> Ha figli! (Posizione: 0, lunghezza: 18)
------
head -> Ha figli! (Posizione: 18, lunghezza: 20)
------
p -> Ha figli! (Posizione: 38, lunghezza: 1293)
------
del -> Ha figli! (Posizione: 469, lunghezza: 4)
------
[Molti altri tag omessi per comodità._]
------
DOCUMENTO 1: 
di VINCENZO CERAMILE VISIONI DEL CALVOUna mattina mi svegliai, mi guardai allo specchio e dissi: "Adesso basta, debbo subito fare qualcosa!" Mi lavai la testa col mio solito sciampo per bambini e giù di corsa a prendere l'autobus. [_TestoMolto lungo Tagliato per comodità._]
-------------
Contenuto di 'tag': { null }
Aiutatemi per piacere!