personal.xsd personal.xml Boss Big chief@foo.com Worker One one@foo.com Worker Two two@foo.com Worker Three three@foo.com Worker Four four@foo.com Worker Five five@foo.com /* przyklad J. Neumanna * */ import java.io.IOException; import javax.xml.parsers.FactoryConfigurationError; // interfejs SAX 2.0 import org.xml.sax.XMLReader; import org.xml.sax.SAXException; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.Attributes; import org.xml.sax.SAXParseException; import org.xml.sax.ErrorHandler; // klasy pomocnicze SAX z fabryka parsera i obsluga zawartosci import org.xml.sax.helpers.XMLReaderFactory; import org.xml.sax.helpers.DefaultHandler; public class SaxDemo1 { public void performDemo(String uri) { try { // klasa obslugujaca zawartosc, cala logika naszej aplikacji DefaultHandler contentHandler = new MyDefaultHandler(); // klasa obslugujaca bledy ErrorHandler errorHandler = new MyDefaultHandler(); /* * Stworzymy i skonfigurujemy parser przy uzyciu jednej z * implementacji SAX */ // instancja parsera bezposrednio z // org.xml.sax.helpers.XMLReaderFactory XMLReader parser = XMLReaderFactory .createXMLReader("org.apache.xerces.parsers.SAXParser"); // Konfiguracja parsera // rejestracja procedur obslugi zawartosci - // rejestracja naszej obslugi aplikacji i jej logiki parser.setContentHandler(contentHandler); // rejestracja procedur obslugi bledow parser.setErrorHandler(errorHandler); // wlaczenie validacji po DTD parser.setFeature("http://xml.org/sax/features/validation", true); // wlaczenie validacji po schema, uwaga na "apache" w nazwie parser.setFeature( "http://apache.org/xml/features/validation/schema", true); // wlaczenie obslugi przestrzeni nazw parser.setFeature("http://xml.org/sax/features/namespaces", true); // przetwarzanie encji zewnetrznych ogolnych parser.setFeature( "http://xml.org/sax/features/external-general-entities", true); // przetwarzanie encji zewnetrzynych parametrycznych parser.setFeature( "http://xml.org/sax/features/external-parameter-entities", true); // wlasciwe przetwarzanie, parser.parse(uri); } catch (IOException e) { System.out.println("Blad przy wczytywaniu pliku " + uri + e.getMessage()); } catch (SAXException e) { System.out.println("Blad przy przetwarzaniu pliku " + uri + e.getMessage()); } catch (FactoryConfigurationError e) { System.out.println("Blad przy tworzeniu fabryki " + uri + e.getMessage()); } } public static void main(String[] args) { if (args.length != 1) { System.out.println("Konieczny argument: URI"); System.exit(0); } SaxDemo1 myParser = new SaxDemo1(); myParser.performDemo(args[0]); } } /* * definiujemy tylko interesujace nas metody i * interfejsy, korzystajac z gotowej klasy implementujacej wszystkiej * interfejsy, przeslaniamy interesujace nas metody (zdarzenia): ponizej * realizacja zadania polegajacego na wyswietleniu emaili */ class MyDefaultHandler extends DefaultHandler { private boolean wyswietlac = false; public void startElement(String uri, String localName, String qName, Attributes atts) { System.out.println("Wystapil element z przestrzeni: " + uri + " ; qName: " + qName); if (qName.equals("email")) wyswietlac = true; } public void endElement(String uri, String localName, String qName) { if (qName.equals("email")) wyswietlac = false; } public void startDocument() { System.out.println("Poczatek przetwarzania dnia 22 kwietnia"); } public void characters(char[] ch, int start, int length) { if (wyswietlac) { for (int i = start; i < start + length; i++) System.out.print(ch[i]); System.out.println(); } } public void warning(SAXParseException exception) throws SAXException { System.out.println("** Przetwarzanie ostrzezenia **\n" + "Wiersz: " + exception.getLineNumber() + "\n" + "URI " + exception.getSystemId() + "\n" + "Komunikat: " + exception.getMessage()); throw new SAXException(""); } public void error(SAXParseException exception) throws SAXException { System.out.println("** Przetwarzanie bledu **\n" + "Wiersz: " + exception.getLineNumber() + "\n" + "URI " + exception.getSystemId() + "\n" + "Komunikat: " + exception.getMessage()); throw new SAXException(""); } public void fatalError(SAXParseException exception) throws SAXException { System.out.println("** Przetwarzanie bledu krytycznego **\n" + "Wiersz: " + exception.getLineNumber() + "\n" + "URI " + exception.getSystemId() + "\n" + "Komunikat: " + exception.getMessage()); throw new SAXException(""); } }