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