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("");
}
}