nn sono affatto esperto di Java, quindi perdonatemi se scrivo qualche cavolata..
ho scritto queste due classi java:
che scinde un file xml in altri due e: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 scrive all'interno di un file xml la riga che lo collegherà dopo ad un foglio di stile xsl.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(); } }
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

Rispondi quotando