Bom dia pessoal,
Preciso gerar um arquivo XML para integrar com outro sistema. esse arquivo deve ser exatamente igual a esse:
<?xml version="1.0" standalone="true"?>
-<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD WIDTH="20" fieldtype="string" attrname="ID_COMANDA"/>
<FIELD WIDTH="1" fieldtype="string" attrname="EVENTO"/>
</FIELDS>
<PARAMS/>
</METADATA>
-<ROWDATA>
<ROW EVENTO="L" ID_COMANDA="00091176" RowState="4"/>
</ROWDATA>
</DATAPACKET>
fiz uma classe para gerá-lo:
package comandas;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class CreateXml {
public void criarXml(String comanda) {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
Document documentoXML = documentBuilder.newDocument();
documentoXML.setXmlStandalone(true);
documentoXML.getDomConfig();
Element DATAPACKET = documentoXML
.createElement("DATAPACKET");
Attr Version = documentoXML.createAttribute("Version");
Version.setValue("2.0");
DATAPACKET.setAttributeNode(Version);
documentoXML.appendChild(DATAPACKET);
Element METADATA = documentoXML.createElement("METADATA");
DATAPACKET.appendChild(METADATA);
Element FIELDS = documentoXML.createElement("FIELDS");
METADATA.appendChild(FIELDS);
int a = 1;
for (int i = 0; i < a; i++) {
Element FIELD = documentoXML.createElement("FIELD");
FIELDS.appendChild(FIELD);
Attr WIDTH = documentoXML.createAttribute("WIDTH");
WIDTH.setValue("20");
FIELD.setAttributeNode(WIDTH);
Attr fieldtype = documentoXML.createAttribute("fieldtype");
fieldtype.setValue("string");
FIELD.setAttributeNode(fieldtype);
Attr attrname = documentoXML.createAttribute("attrname");
attrname.setValue("ID_COMANDA");
FIELD.setAttributeNode(attrname);
}
Element FIELD = documentoXML.createElement("FIELD");
FIELDS.appendChild(FIELD);
Attr fieldtype = documentoXML.createAttribute("fieldtype");
fieldtype.setValue("string");
FIELD.setAttributeNode(fieldtype);
Attr WIDTH = documentoXML.createAttribute("WIDTH");
WIDTH.setValue("1");
FIELD.setAttributeNode(WIDTH);
Attr attrname = documentoXML.createAttribute("attrname");
attrname.setValue("EVENTO");
FIELD.setAttributeNode(attrname);
Element PARAMS = documentoXML.createElement("PARAMS");
METADATA.appendChild(PARAMS);
Element ROWDATA = documentoXML.createElement("ROWDATA");
DATAPACKET.appendChild(ROWDATA);
Element ROW = documentoXML.createElement("ROW");
ROWDATA.appendChild(ROW);
Attr EVENTO = documentoXML.createAttribute("EVENTO");
EVENTO.setValue("L");
Attr ID_COMANDA = documentoXML.createAttribute("ID_COMANDA");
ID_COMANDA.setValue(comanda);
Attr RowState = documentoXML.createAttribute("RowState");
RowState.setValue("4");
ROW.setAttributeNode(EVENTO);
ROW.setAttributeNode(ID_COMANDA);
ROW.setAttributeNode(RowState);
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource documentoFonte = new DOMSource(documentoXML);
StreamResult documentoFinal = new StreamResult(new File(
"D:\\" + comanda + ".xml"));
transformer.transform(documentoFonte, documentoFinal);
} catch (ParserConfigurationException ex) {
Logger.getLogger(CreateXml.class.getName()).log(Level.SEVERE, null,
ex);
} catch (TransformerConfigurationException ex) {
Logger.getLogger(CreateXml.class.getName()).log(Level.SEVERE, null,
ex);
} catch (TransformerException ex) {
Logger.getLogger(CreateXml.class.getName()).log(Level.SEVERE, null,
ex);
}
}
}
porém na saida do arquivos os attibutos ficam fora de ordem e o cabecalho fica diferente:
<?xml version="1.0" encoding="UTF-8"?>-<DATAPACKET Version="2.0">
-<METADATA>
-<FIELDS>
<FIELD fieldtype="string" attrname="ID_COMANDA" WIDTH="20"/>
<FIELD fieldtype="string" attrname="EVENTO" WIDTH="1"/>
</FIELDS>
<PARAMS/>
</METADATA>
-<ROWDATA>
<ROW RowState="4" ID_COMANDA="00091176" EVENTO="L"/>
</ROWDATA>
</DATAPACKET>
se alguem puder ajudar agradeço desde ja!
abraço a todos!