Preciso que meu software gere arquivos XML, porém eu não estou conseguindo.
Dei uma olhada nas APIs de IO, OutputStream e outros, mas não estou conseguindo.
Por exemplo, preciso gerar um arquivo parecido com esse, que outro software vai usar:
Você pode gerar esse arquivo normalmente como um arquivo texto. Exemplo
Agora se você quiser algo mais especifico para gerar/ler XML pode usar o JDOM.
Obrigado, fiz pelo primeiro exemplo e deu certo…
Só tenho uma dúvida, como vou editar sempre o mesmo arquivo da maneira do exemplo vai sendo acrescentado o texto no final do arquivo.
Toda vez que for gerar o arquivo preciso sobrepor o texto anterior, ou excluir o arquivo e criá-lo novamente.
Como faço isso??
publicstaticvoidgenerateXMLFile(NotaFiscalEletronicanfe,StringsavePath)throwsIOException,Exception{//Criar uma String no formato XML para o inicio da criação do arquivo.StringxmlHeader;xmlHeader="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";xmlHeader+="\n<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">";xmlHeader+="\n</NFe>\n";/* * Cria um InputStream a partir do string "xmlHeader". Se você for parsiar("abrir") o XML * de um arquivo .xml já existente então pegue o InputStream do File (arquivo) do qual * você esta lendo. * */ByteArrayInputStreamxml=newByteArrayInputStream(newString(xmlHeader.getBytes(),"UTF-8").getBytes());DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdocBuilder=dbf.newDocumentBuilder();Documentdoc=docBuilder.parse(xml);//Pega o nó raís da árvore do XML.ElementrootNode=doc.getDocumentElement();//Cria e adiciona o nó base da NFe no nó raís do XML.ElementinfNFe=doc.createElement("infNFe");infNFe.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");infNFe.setAttribute("Id","NFe"+nfe.getDVChaveAcesso());infNFe.setAttribute("versao",String.valueOf(nfe.getVersao()));rootNode.appendChild(infNFe);//Inicia a adição dos demais nós que devem conter o XML de acordo com a NFe.generateHeaderNodes(nfe,doc,infNFe);//Salva o documento XML no diretório passado como parâmetro. DOMSourcesource=newDOMSource(doc);StreamResultresult=newStreamResult(newFileOutputStream(savePath+"zell.xml"));TransformerFactorytransFactory=TransformerFactory.newInstance();Transformertransformer=transFactory.newTransformer();transformer.transform(source,result);}
E ai gravaria as “colunas” filtrando por exemplo os modulos do sistema em um List ou ArrayList.
M
Mstanguine
Eu iria de XStream tbm. =)
_
_Zell_
Ola Leopose =)
Olha, você pode fazer isso facilmente criando um Document DOM. Abaixo vou deixar um código exemplo.
StringstringXML="Essa string deve ser o seu XML.";ByteArrayInputStreamin=newByteArrayInputStream(newString(stringXML.getBytes(),"UTF-8").getBytes());DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=dbf.newDocumentBuilder();Documentxml=builder.parse(in);Elementroot=xml.getDocumentElement();Elementnode=(Element)root.getElementsByTagName("usuario").item(0);//Daqui pra frente é só fazer a leitura normal do XML conforme eu já postei acima neste tópico =)
Espero ter ajudado!
Abraço!
E
Elsino
Zell:
Aqui vai um exemplo da criação de um arquivo XML com as classes DOM, que são classes nativas do java, sem precisar de usar APIs externas.
O Exemplo a seguite é a geração de uma NFe que estou fazendo atualmente, essa NFe, em outras palavras, é apenas um arquivo XML.
publicstaticvoidgenerateXMLFile(NotaFiscalEletronicanfe,StringsavePath)throwsIOException,Exception{//Criar uma String no formato XML para o inicio da criação do arquivo.StringxmlHeader;xmlHeader="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";xmlHeader+="\n<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">";xmlHeader+="\n</NFe>\n";/* * Cria um InputStream a partir do string "xmlHeader". Se você for parsiar("abrir") o XML * de um arquivo .xml já existente então pegue o InputStream do File (arquivo) do qual * você esta lendo. * */ByteArrayInputStreamxml=newByteArrayInputStream(newString(xmlHeader.getBytes(),"UTF-8").getBytes());DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdocBuilder=dbf.newDocumentBuilder();Documentdoc=docBuilder.parse(xml);//Pega o nó raís da árvore do XML.ElementrootNode=doc.getDocumentElement();//Cria e adiciona o nó base da NFe no nó raís do XML.ElementinfNFe=doc.createElement("infNFe");infNFe.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");infNFe.setAttribute("Id","NFe"+nfe.getDVChaveAcesso());infNFe.setAttribute("versao",String.valueOf(nfe.getVersao()));rootNode.appendChild(infNFe);//Inicia a adição dos demais nós que devem conter o XML de acordo com a NFe.generateHeaderNodes(nfe,doc,infNFe);//Salva o documento XML no diretório passado como parâmetro. DOMSourcesource=newDOMSource(doc);StreamResultresult=newStreamResult(newFileOutputStream(savePath+"zell.xml"));TransformerFactorytransFactory=TransformerFactory.newInstance();Transformertransformer=transFactory.newTransformer();transformer.transform(source,result);}