XML em java

2 respostas
M

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!

2 Respostas

igomes

Já ouviu falar do Jaxb o serializador padrão de xml do java ? da pra vc reduzir mais da metade desse código.
Tem o xstream também

M

Humm… não conheço mas já vou dar uma olhada agora mesmo…
obrigado!!

Criado 21 de fevereiro de 2016
Ultima resposta 21 de fev. de 2016
Respostas 2
Participantes 2