package elte.java2_utikalauz5.xml; import java.io.IOException; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; /** SAX példaprogram. Igazából itt az "implements ContentHandler"-t kellett volna írnom, ha az alapoktól indulnék, de akkor a ContentHandler interface összes eljárására kellett volna valami - üres - implementációt adnom. A DefaultHandler azonban megkönyíti a használatát Handler interface-eknek azzal, hogy előre ad egy ilyen implementációt, és itt csak át definiálom azt a kettőt, amire szükségem van. @link.forrásfájl {@docRoot}/../data/xml/src SaxDemo.java @link.letöltés {@docRoot}/../data/xml SaxDemo.jar @since Java 2 Útikalauz programozóknak 5.0 */ public class SaxDemo extends DefaultHandler { boolean isFamilyName = false; /* * Ebben az eljárásban jelzem, hogy elkezdődött a "családnév" címke. */ public void startElement( String namespaceURI, String localName, String rawName, Attributes atts ) throws SAXException { if ( localName.equals("családnév") ) { isFamilyName = true; } } public void characters( char[] ch, int start, int len ) { if ( isFamilyName ) { String s = new String( ch, start, len ); System.out.println( s ); } isFamilyName = false; } public static void main( String[] args ) { try { boolean isValidating = false; boolean isValidatingSchema = false; String xmlURI = ""; //A paraméterek ellenőrzése if (( args.length == 2 ) && ( args[0].equals("-v") )) { isValidating = true; xmlURI = args[1]; } else if (( args.length == 2 ) && ( args[0].equals("-s") )) { isValidating = true; isValidatingSchema = true; xmlURI = args[1]; } else if ( args.length == 1 ) { xmlURI = args[0]; } else { System.err.println("Használat: java SaxDemo [-v|-s] XML_URI."); System.err.println(" -v: bekapcsolja az érvényesítést."); System.err.println(" -s: bekapcsolja az érvényesítést XML Sémákkal."); System.exit(1); } //Standard módon a következő sorok kérnek el egy //példányt a konkrét SAX megvalósításból. SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setValidating( isValidating ); //true az alapértelmezés spf.setNamespaceAware( true ); //Bekapcsolja a névtartományokat SAXParser saxParser = spf.newSAXParser(); if ( isValidatingSchema ) { String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); } XMLReader parser = saxParser.getXMLReader(); //A következő két sor állítja be, hogy a mi //ContentHandler-ünket használja a SAX. //Enélkül semmi hasznos nem történne futás közben. ContentHandler contentHandler = new SaxDemo(); parser.setContentHandler( contentHandler ); parser.parse( xmlURI ); } catch (SAXException se) { //Ez például akkor lép fel, ha egy címke nincs lezárva System.err.println( "SAX Hiba:" + se ); } catch (IOException ioe) { //Ez például akkor lép fel, ha az XML fájl nem olvasható System.err.println( "IO Hiba:" + ioe ); } catch (Exception e) { System.err.println( "Hiba:" + e ); } } }