Problema nella formattazione output XML

di il
1 risposte

Problema nella formattazione output XML

Ciao a tutti,
ho un file di testo che devo trasformare in formato XML. Il parsing della riga di testo è già pronta con tutte le informazioni che però devo inserirle in un file XML così formattato e indentato.

<?xml version="1.0" encoding="UTF-8"?>
<ILCInput>
    <inputID>FILE1</inputID>
    <recordCount>12</recordCount>
    <totalHours>22</totalHours>
    <totalEmployees>2</totalEmployees>
    <employee>
        <setalNumber>1234</setalNumber>
        <countryCode>ITA</countryCode>
        <weekSummary>
            <weekEndingData>2018-05-04</weekEndingData>
            <laborRow>
               <accountID>AAAA</accountID>
               <groupID>GROUP1</groupID>
            </laborRow>
        </weekSummary>
    </employee>
</ILCInput>
Il problma che ho è che i tag non sono indentati e sono in sequenza o anche sulla stessa riga. Per esempio ho questa situazione

<?xml version="1.0" encoding="UTF-8"?><ILCInput>
    <inputID>FILE1</inputID>
    <recordCount>12</recordCount>
    <totalHours>22</totalHours>
    <totalEmployees>2</totalEmployees>
    <employee>?????</employee>
    <setalNumber>1234</setalNumber>
...
Uso le seguenti istruzioni di codice per le generazione del file

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 new ClaimXML().begin();
	}

    public void begin() {
        try {
            in = new BufferedReader(new FileReader("/home/cipolla/Scrivania/FILE2.txt"));
            out = new StreamResult("/home/cipolla/Scrivania/xml_FILE2.xml");
            openXml();
            String str;
            String yn = new String("no");
            
            while ((str = in.readLine()) != null) {
            	if (str.contains("ORE_LAVIT-CONS"))
                   process(str,yn);
            }
            in.close();
            closeXml();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void openXml() throws ParserConfigurationException, TransformerConfigurationException, SAXException {

        SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
        th = tf.newTransformerHandler();

        // pretty XML output
        Transformer serializer = th.getTransformer();
        serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        
        th.setResult(out);
        th.startDocument();
        th.startElement(null, null, "ILCInput", null);

    }

    public void closeXml() throws SAXException {
        th.endElement(null, null, "ILCInput");
        th.endDocument();
    }


    public void process(String s, String headeryn) throws SAXException {
    	String no_set = new String("no");
    	
    	String[] parts = s.split("\t");

    	if (headeryn.equals(no_set))
    	{
    	    th.startElement(null, null, "inputID", null);
            th.characters(no_set.toCharArray(), 0, no_set.length());
            th.endElement(null, null, "inputID");
            th.startElement(null, null, "recordCount", null);
            th.characters(no_set.toCharArray(), 0, no_set.length());
            th.endElement(null, null, "recordCount");           	
            th.startElement(null, null, "totalHours", null);
            th.characters(no_set.toCharArray(), 0, no_set.length());
            th.endElement(null, null, "totalHours");     		
            th.startElement(null, null, "totalEmployees", null);
            th.characters(no_set.toCharArray(), 0, no_set.length());
            th.endElement(null, null, "totalEmployees");     		
    	    change(headeryn);
       	}
    	//countryCode
    	String countrycode = parts[1].substring(0, 3);
        ........
        th.startElement(null, null, "employee", null);
        th.characters(companycode.toCharArray(), 0, companycode.length());
        th.endElement(null, null, "employee");
        ..........
        }    
Attendo fiducioso un vostro aiuto.
Grazie in anticipo.

Giovanni

1 Risposte

  • Re: Problema nella formattazione output XML

    gio123 ha scritto:


    Il problma che ho è che i tag non sono indentati e sono in sequenza o anche sulla stessa riga. Per esempio ho questa situazione
    La impostazione del "pretty print" del XML tramite i due setOutputProperty di per sé è corretta ed è quello che serve per indentare di un tot di spazi.

    Il tuo codice non l'hai mostrato completo, quindi verifica tu solo bene che stai davvero "annidando" i tag per fare la struttura che hai indicato.

    Verifica anche e precisa qui quale è la implementazione di TransformerHandler che sta prendendo. Fai un print della classe di quel th (il TransformerHandler):

    System.out.println(th.getClass());

    Se è dello Xalan interno al framework standard di Java, la classe è: com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl
Devi accedere o registrarti per scrivere nel forum
1 risposte