nn sono affatto esperto di Java, quindi perdonatemi se scrivo qualche cavolata..
ho scritto queste due classi java:
codice:
import java.io.*;


class xmlparser{												//creo la classe che gestirà la scissione dei file
  private BufferedWriter xmlMd,xmlDat;								//queste classi permettono rispettivamente
  private BufferedReader xmlStart;									//la lettura e la scrittura di un file riga per riga

  xmlparser	(String nameStart, String nameDat, String nameMd) {
	
    try {
      xmlStart = new BufferedReader(new FileReader(nameStart));		//apro il file da modificare
      xmlDat = new BufferedWriter(new FileWriter(nameDat));			//creo i due nuovi file .xml
      xmlMd = new BufferedWriter(new FileWriter(nameMd));			//in cui inserire i dati e i metadati
    } catch(IOException e) {e.printStackTrace();}
  }
  
  //Metodo parse()
  void parse() {													//creo il metodo parse() per la nostra classe
    String inputLine = "";	
    
    try {
      while((inputLine = xmlStart.readLine()) != null) {			//uso il metodo readLine che trasforma la riga letta in una stringa
       
    	if(inputLine.equals("")) continue;							//se la riga è vuot interrompe il ciclo
        inputLine = inputLine.trim();								//il metodo trim() elimina gli spazi all'inizio	
        															//ed alla fine di una stringa
        switch(inputLine.charAt(1)) {								//il metodo charAt restituisce il carattere in posizione 1 (quindi il secondo)
          case '-':													//in tal caso non eseguo istruzioni
        	  break;
          
          case '?': case 'G': case 'P': case 'H': case '/':  														//in tal caso riscrivo la riga nel file Dati
        	  xmlDat.write(inputLine);									//e vado a capo
        	  xmlDat.newLine();
        	  break;
          
          case 'M':
        	  xmlDat.write("<Mpeg7><DescriptionUnit><Descriptor><Region><RegionNumber>255</RegionNumber>");		//ripulisco la stringa
        	  xmlDat.newLine();
        	  break;
          
          default:
        	  int dots = inputLine.indexOf(':');        				//separo le stringhe ai lati dei due punti
        	  xmlMd.write("<"+inputLine.substring(0,dots)+">");			//e le riscrivo, formattandole, nel file Metadati
        	  xmlMd.write((inputLine.substring(dots+1).trim()));
        	  xmlMd.write("</"+inputLine.substring(0,dots)+">");
        	  xmlMd.newLine();
        	  break;
        }
      }
        xmlStart.close();											//chiudo i tre file
        xmlDat.flush();
        xmlDat.close();
        xmlMd.flush();
        xmlMd.close();
    } catch(IOException e) {e.printStackTrace();}
  }
}

class TestXML {
  public static void main(String[] args)  {
	    
    if(args.length != 3) {
      System.out.println("Please enter <nameStart>, <nameDat>, <nameMd>");
      System.exit(1);
    }
    
    xmlparser fileXML = new xmlparser(args[0],args[1],args[2]);
    fileXML.parse();
  }
}
che scinde un file xml in altri due e:
codice:
import java.io.*;

public class xslApplicator {
	private BufferedWriter xmlWrite;
	private BufferedReader xmlRead;
	String firstLine = "<Mpeg7><DescriptionUnit><Descriptor><Region><RegionNumber>255</RegionNumber>";
	
	xslApplicator (String oldFile, String newFile) {
		try{
			xmlRead = new BufferedReader(new FileReader(oldFile));
			xmlWrite = new BufferedWriter(new FileWriter(newFile));
		} catch(IOException e) {e.printStackTrace();}
	}

//metodo writeXslBinding
void writeXslBinding() {						//scrive la riga di codice che collega il file .xml al foglio .xsl	
	try{
		String inLine = "";
		 while((inLine = xmlRead.readLine()) != null){
			if(inLine.equals(firstLine)){
				xmlWrite.write("<?xml-stylesheet type=");
				xmlWrite.write('"');
				xmlWrite.write("text/xsl");
				xmlWrite.write('"');
				xmlWrite.write(" href=");
				xmlWrite.write('"');
				xmlWrite.write("tabella.xsl");
				xmlWrite.write('"');
				xmlWrite.write("?>");
				xmlWrite.newLine();
			}
			xmlWrite.write(inLine);
			xmlWrite.newLine();
		}
			xmlRead.close();
			xmlWrite.close();
			xmlWrite.flush();
		} catch (IOException e) {e.printStackTrace();}
}
}


class testXsl {
	public static void main(String[] args) {
		
		if(args.length != 2) {
		      System.out.println("Please enter [list=1] <newFile>");
		      System.exit(1);
		    }
		xslApplicator fileXML = new xslApplicator(args[0],args[1]);
		fileXML.writeXslBinding();
	}
}
che scrive all'interno di un file xml la riga che lo collegherà dopo ad un foglio di stile xsl.

quello che vorrei fare è unire le due cose in modo da poter effettuare le operazioni in una sola volta.
il file xml originario viene scisso in due nuovi file e, nel primo di essi (xmlDat), viene scritta la riga che lo collega all'xml, o meglio viene creata una nuova versione del file contenente la riga