• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Knitter

Parsers de XML para Java?

6 mensagens neste tópico

Boas,

Alguém já usou parsers de XML em Java que recomende? Precisava de um parser SAX e que fizesse a validação de XML através de DTDs.

Peace.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

à api do java só lhe falta mesmo é fazer torradas:

documentação do javax.xml.parsers.SAXParser:

http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/SAXParser.html

documentação do javax.xml.validation:

http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/package-summary.html

e vê este tutorial para te ajudar a trabalhar com este aspecto da api:

http://java.sun.com/xml/tutorial_intro.html

principalmente nesta secção do tutorial:

http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/sax/index.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dizes muito bem, a API, não a sua implementação... já agora não devias já ter saído de casa e estar a caminho da ESTG! Mexe esse S!

Continuo à procura de uma implementação, se mais alguém conhecer alguma :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já trabalhei com SAX embora tenho desistido porque não dava para o que eu queria.

Mas tenho para aqui ainda algumas implementações de teste

import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory; 
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;

public class MySax extends DefaultHandler{

private boolean user;
private boolean nome;
private boolean idade;
private boolean mail;


public MySax(){
	super();
	this.user = false;
	this.nome = false;
	this.idade = false;
	this.mail = false;
}

public void startElement(String namespaceURI,String sName,String qName,Attributes attrs)throws SAXException{
	if(qName.equalsIgnoreCase("usuario") && attrs.getValue("id").equalsIgnoreCase("2")){
		this.user = true;
	}

	if(qName.equalsIgnoreCase("nome") && user){
		this.nome = true;
	}

	if(qName.equalsIgnoreCase("idade") && user){
		this.idade = true;
	}

	if(qName.equalsIgnoreCase("email") && user){
		this.mail = true;
	}
}


public void endElement(String namespaceURI,String sName,String qName)throws SAXException{
	if(qName.equalsIgnoreCase("usuario")){
		user = false;
	}
}

public void startDocument() throws SAXException{
	System.out.println("START");
}

public void endDocument()throws SAXException{
	System.out.println("END");
}

public void characters(char buf[], int offset, int len)throws SAXException{
	if(nome){
		System.out.println("Nome : "+new String(buf,offset,len));
		nome = false;
	}

	else if(idade){
		System.out.println("Idade : "+new String(buf,offset,len));
		idade = false;
	}

	else if(mail){
		System.out.println("Mail : "+new String(buf,offset,len));
		mail = false;
	}
}

public static void main(String args[]){
	try {
    		//out = new OutputStreamWriter(new FileOutputStream(System.getProperty("user.dir")+"\\teste.txt") ,"UTF8");
    		DefaultHandler handler = new MySax();
    		
    		SAXParserFactory factory = SAXParserFactory.newInstance();
    		SAXParser saxParser = factory.newSAXParser();
    		saxParser.parse( new File(System.getProperty("user.dir")+"\\teste.xml"), handler ); 
  		}
  		catch (Throwable t) {
  			t.printStackTrace();
	}
	System.exit(1);
}
}

Isto não é nada em concreto mas da para ver como funciona, o mais complicado é perceber o funcionamento do parser depois é facil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas o que tu tens é a implementação do parser, eu não quero implementar, quero ter já implementado.

Tenho estado a ver o kxml, embora seja para j2me penso que funcionará sem problemas, mas gostava de ver outros.

Quero uma biblioteca com a implementação já feita :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora