Escrever XML

3 respostas
L

Pessoal,

Eu quero escrever o seguinte conteúdo XML num arquivo chamado teste.xml.

<?xml version="1.0" encoding="ISO-8859-1"?>
<PAGE>
  <DEFINITION>
    <TITLE>Página pagina_vazia</TITLE>
    <SECURITY>OFF</SECURITY>
    <MIME>html</MIME>
    <NOLOGIN>OFF</NOLOGIN>
    <BROWSERCACHE>OFF</BROWSERCACHE>
    <SYSPAGE>OFF</SYSPAGE>
  </DEFINITION>
</PAGE>

E fiz a seguinte classe que está dando erro de NullPointerException logo após o System.out.println(“1”). o que pode estar errado.

import java.io.File;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

import br.com.itx.engine.ExecuteParams;
import br.com.itx.integration.InterfaceConnector;
import br.com.itx.util.WIMap;

public class CreateLayout implements InterfaceConnector {
	
	DocumentBuilder builder;
	Document doc;
	WIMap wiMap;
	
    public void execute(ExecuteParams wiParams) {
    	System.out.println("1");
    	doc = builder.newDocument();
    	Element rootElement  = doc.createElement("page");
    	Element childElement = doc.createElement("definition");
    	Text textNode1 		 = doc.createTextNode("title");
    	Text textNode2 		 = doc.createTextNode("security");
    	Text textNode3 		 = doc.createTextNode("mime");
    	Text textNode4 		 = doc.createTextNode("nologin");
    	Text textNode5 		 = doc.createTextNode("browsercache");
    	Text textNode6       = doc.createTextNode("syspage");
    	System.out.println("2");
    	doc.appendChild(rootElement);
    	rootElement.appendChild(childElement);
    	childElement.appendChild(textNode1);
    	childElement.appendChild(textNode2);
    	childElement.appendChild(textNode3);
    	childElement.appendChild(textNode4);
    	childElement.appendChild(textNode5);
    	childElement.appendChild(textNode6);
    	System.out.println("3");
    	textNode1.setData("Título da Página");
    	textNode2.setData("OFF");
    	textNode3.setData("html");
    	textNode4.setData("OFF");
    	textNode5.setData("OFF");
    	textNode6.setData("OFF");
    	System.out.println("4");
    	try{
    	Transformer t = TransformerFactory.newInstance().newTransformer();
    	t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(new File("C:\\Tomcat_5\\webapps\\wistartup\\WEB-INF\\classes\\teste.xml"))));
    	System.out.println("5");
    	} 
    	catch (Exception e) {
    		e.printStackTrace();
    		System.out.println("6");
    	}
    }    	

    public boolean exit() {
        return false;
    }
}

3 Respostas

Abdon
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();

Vc não esta instanciando o seu builder, por isto esta dando a NPE

Seu codiguim tb não vai funfa, vc precisa criar um elemente e dar um append em uma Text, fazendo o que vc fez vai dar algo assim:

&lt;page&gt;
   &lt;definition&gt;TituloOffhtmlon&lt;/definition&gt;
 &lt;/page&gt;

Vai ficar certo colocando os devidos valores assim:

import java.io.File;
 import java.io.FileOutputStream;
 
 import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
import org.w3c.dom.Text;
 

 
 public class Teste{
 	 	
     public static void main(String[] args) {
    	 
    	 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    	 DocumentBuilder builder = null;
    	 Document doc = null;
    	 
		try {
			builder = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
    	 
    	 doc = builder.newDocument();
    	 
	     	System.out.println("1");
	     	doc = builder.newDocument();
	     	
	     	Element rootElement  = doc.createElement("page");
	     	Element childElement = doc.createElement("definition");
	     	Element e1 		 = doc.createElement("title");
	     	Element e2 		 = doc.createElement("security");
	     	Element e3 		 = doc.createElement("mime");
	     	Element e4 		 = doc.createElement("nologin");
	     	Element e5 		 = doc.createElement("browsercache");
	     	Element e6       = doc.createElement("syspage");
	     	
	     	Text a = doc.createTextNode("Lixo");
	     	e1.appendChild(a);
	     	
	     	doc.appendChild(rootElement);
	     	rootElement.appendChild(childElement);
	     	childElement.appendChild(e1);
	     	childElement.appendChild(e2);
	     	childElement.appendChild(e3);
	     	childElement.appendChild(e4);
	     	childElement.appendChild(e5);
	     	childElement.appendChild(e6);
	     	
     	try{
     	Transformer t = TransformerFactory.newInstance().newTransformer();
     	t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(new File("C:\\teste.xml"))));

     	} 
     	catch (Exception e) {
     		e.printStackTrace();
     	}
     }    	
 
     public boolean exit() {
         return false;
     }
 }
L

Como faria ao escrever o arquivo XML, ele vir identado e alterar o encoding dele?

Psytheory
try{

Transformer t = TransformerFactory.newInstance().newTransformer();

t.setOutputProperty(OutputKeys.INDENT, “yes”);

t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(new File("/home/SEU/DIRE/FILE.xml"))));
}   
     catch (Exception e) {  
        e.printStackTrace();  
     }
Criado 8 de julho de 2006
Ultima resposta 27 de mai. de 2008
Respostas 3
Participantes 3