quinta-feira, 5 de setembro de 2013

XML em java, DOM/SAX




Exemplo de Escrita via DOM

Implica a criação de um organograma na memória que contem o documento XML, e com ele na memória podemos fazer qualquer tipo de percurso e ações com os elementos que quisermos. Indicado portanto para movimentação e gravação.

import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.dom.*;

public class exemploDom
{
public static void main(String[] args) 
{
Document doc;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
   try
   {
builder = factory.newDocumentBuilder();
doc = builder.newDocument();   
Element root = doc.createElement("main");
Element hroot = doc.createElement("submain");
root.appendChild(hroot);    
doc.appendChild(root);
Transformer trans = TransformerFactory.newInstance().newTransformer();
trans.setOutputProperty(OutputKeys.STANDALONE,"yes");
trans.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
trans.setOutputProperty(OutputKeys.INDENT,"yes");
trans.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"check.dtd");     
StringWriter output = new StringWriter();

                TransformerFactory.newInstance().newTransformer().transform(
                           new DOMSource(doc), 
                           new StreamResult(output));
//envia para a tela
System.out.println(output);
//gera um arquivo
           trans.transform(new DOMSource(doc),new StreamResult(
               new  FileOutputStream("OutputXML.xml")));            
}
catch (Exception ex)
{  
ex.printStackTrace();
}
}
}

Exemplo de leitura via SAX

Utiliza-se para fazer um percurso da seqüência dos elementos do documento XLM, portanto indicado para leitura.

import java.io.IOException;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;

public class exemploSax{
public static void main(String[] args) {
String arquivo = args[0];
try{
AXParser parser = SAXParserFactory.newInstance().newSAXParser();
InputSource input = new InputSource(arquivo);
parser.parse(input, new XMLHandler());

tch (ParserConfigurationException ex) {
x.printStackTrace();

ch (SAXException ex) {
ex.printStackTrace();

tch (IOException ex) {
ex.printStackTrace();
}
}
}

class XMLHandler extends DefaultHandler {

private StringBuffer galhoAtual = new StringBuffer(200);
private StringBuffer valorAtual = new StringBuffer(100);

public void startDocument() {
System.out.print("iniciando");
}
public void startElement(String uri,String localName,String tag,Attributes atributos) {
galhoAtual.append("/" + tag);
System.out.print(
"\n<"+ galhoAtual.substring(1)+ (atributos.getLength() != 0 ? " +ATRIBUTOS" : "")+ ">");
valorAtual.delete(0, valorAtual.length());
}
public void characters(char[] ch, int start, int length) {
valorAtual.append(ch, start, length);
}
public void endElement(String uri, String localName, String tag) {
System.out.print(valorAtual.toString().trim());
valorAtual.delete(0, valorAtual.length());
galhoAtual.delete(
galhoAtual.length() - tag.length() - 1,
galhoAtual.length());
}
public void endDocument() {
System.out.print("\nterminando");
}
}

Nenhum comentário:

Postar um comentário