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.[/quote]
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??
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.
public static void generateXMLFile(NotaFiscalEletronica nfe, String savePath) throws IOException, Exception{
//Criar uma String no formato XML para o inicio da criação do arquivo.
String xmlHeader;
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.
* */
ByteArrayInputStream xml = new ByteArrayInputStream(new String(xmlHeader.getBytes(), "UTF-8").getBytes());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.parse(xml);
//Pega o nó raís da árvore do XML.
Element rootNode = doc.getDocumentElement();
//Cria e adiciona o nó base da NFe no nó raís do XML.
Element infNFe = 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.
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new FileOutputStream(savePath + "zell.xml"));
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.transform(source, result);
}
Quem quiser aprender mais ou tirar mais dúvidas de uma consultada nos seguintes artigos:
Nota: Sei que estou atrasado na postagem, mas pode ser útil para pessoas que estão pesquisando o GUJ pelo google o/
Olha, você pode fazer isso facilmente criando um Document DOM. Abaixo vou deixar um código exemplo.
String stringXML = "Essa string deve ser o seu XML.";
ByteArrayInputStream in = new ByteArrayInputStream(new String(stringXML.getBytes(), "UTF-8").getBytes());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document xml = builder.parse(in);
Element root = xml.getDocumentElement();
Element node = (Element) root.getElementsByTagName("usuario").item(0);
//Daqui pra frente é só fazer a leitura normal do XML conforme eu já postei acima neste tópico =)
[quote=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.
public static void generateXMLFile(NotaFiscalEletronica nfe, String savePath) throws IOException, Exception{
//Criar uma String no formato XML para o inicio da criação do arquivo.
String xmlHeader;
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.
* */
ByteArrayInputStream xml = new ByteArrayInputStream(new String(xmlHeader.getBytes(), "UTF-8").getBytes());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.parse(xml);
//Pega o nó raís da árvore do XML.
Element rootNode = doc.getDocumentElement();
//Cria e adiciona o nó base da NFe no nó raís do XML.
Element infNFe = 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.
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new FileOutputStream(savePath + "zell.xml"));
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.transform(source, result);
}
Quem quiser aprender mais ou tirar mais dúvidas de uma consultada nos seguintes artigos:
Nota: Sei que estou atrasado na postagem, mas pode ser útil para pessoas que estão pesquisando o GUJ pelo google o/[/quote]