Jump to content

Parsers de XML para Java?


Knitter
 Share

Recommended Posts

à 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

"You leave nothing but death and horror in your wake!""Now, that's not fair, sometimes there's fire too"

Link to comment
Share on other 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.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.