Gerar arquivo XML

Olá pessoal,

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:

Alguém sabe como faço isso?
Obrigado!

Olá

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.

Outra alternativa bem legal é o XStream.

[quote=furutani]Olá

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??

Obrigado!

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/

Ops… faltou um restinho de código =P

private static void generateHeaderNodes(NotaFiscalEletronica nfe, Document doc, Element root) throws Exception {
		
		Element ide = doc.createElement("ide");
		
		Element cUF		= doc.createElement("cUF");
		Element cNF		= doc.createElement("cNF");
		Element natOp	= doc.createElement("natOp");

		cUF.setTextContent(String.valueOf(nfe.getCodUFEmitente()));
		cNF.setTextContent(nfe.getCodChaveAcesso());
		natOp.setTextContent(nfe.getNaturezaOperacao());
		
		ide.appendChild(cUF);
		ide.appendChild(cNF);
		ide.appendChild(natOp);
	}

O objeto NotaFiscalEletronica é só um object que guarda dados, mais nada o/

Bom galera, seguinte, estou precisando fazer a leitura de um xml pela URL e pegar os valores que serão retornados para futuras consultas.

Algo do tipo:
Passaria a url “http://10.5.11.61/geri/wsgeri.ashx?user=usuario&pass=senha&spass=12315454

E me retornaria um XML com uma estrutura parecida com essa :
view plaincopy to clipboardprint?

    <geri>  
    <usuario>  
       <nome>LEONARDO</nome>  
       <login>999999</login>  
       <trocasenha>False</trocasenha>  
       <perfil>Nomeperfil</perfil>  
    </usuario>  
    <sistema>  
       <modulo id="14" nome="relvolumetria" funcionalidade="visualizacao"/>  
       <modulo id="19" nome="relvolumetriavdn" funcionalidade="visualizacao"/>  
       <modulo id="41" nome="relwfmaderencia" funcionalidade="visualizacao"/>  
    </sistema>  
    </geri>  

E ai gravaria as “colunas” filtrando por exemplo os modulos do sistema em um List ou ArrayList.

Eu iria de XStream tbm. =)

Ola Leopose =)

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 =)

Espero ter ajudado!
Abraço!

[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 = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot; ?&gt;&quot;;			
			xmlHeader += &quot;\n&lt;NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\"&gt;";			
			xmlHeader += "\n&lt;/NFe&gt;\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]

Obrigado pela inicitiava Zell !

Ajudou muito!

Thanks Elsino! Estamos sempre ai pra isso =)
 
Abraço! o/