Cu toate acestea, SAX API este foarte importantă și este baza multor alte tehnologii, așa că am decis să studieze API SAX mai detaliat. Mai jos este traducerea materialelor de pe site-ul oficial. Le-am găsit foarte interesant și merită un studiu mai aprofundat.
SAX - o interfață comună implementată pentru un număr de parser XML (și piese, poziționându-se ca interpretoare XML), este practic pe același număr de API comun pentru lucrul cu XML, cum JDBC este o interfață generică implementată pentru o varietate de baze de date relaționale (și shtrukovinami, poziționare ea însăși ca o bază de date relațională). Dacă doriți să utilizați SAX, aveți nevoie de toate cele de mai sus, după cum urmează:
- Java 1.1 sau modern.
- -SAX2 compatibil parser XML specificat în classpath Java. Dacă aveți nevoie de un astfel de interpretor, a se vedea link-urile.
- distribuție SAX2 specificate în classpath Java. (Cel mai probabil, veți primi împreună cu parser-ul).
- Majoritatea Java distribuții / XML includ SAX2 parser. Cele mai multe servere de aplicații Web-l utilizați pentru a lucra cu XML. Toate distribuțiile cu suport pentru JAXP 1.1 includ suport pentru SAX2.
Parsarea un document XML
Începeți prin a crea o clasă care moștenește de la DefaultHandler (extinde):
Deci, cum este Java - aplicatie, vom crea o principală metodă statică, care folosește metoda de clasă createXMLReader XMLReaderFactory pentru a selecta un driver SAX dinamic (software). Excepție de manipulare este scos din exemplu pentru ușurința înțelegerii. Cererea efectivă trebuie să se ocupe de excepții:
În cazul în care mediul de dezvoltare Java adaugă automat compilate în implicit (sau ajustează META-INF / Servicii / org.xl.sax.driver resurse de sistem), probabil că trebuie să setați Java org.xml.sax de proprietate sistem. conducător auto o valoare care indică calea completă către conducătorul auto SAX, la fel ca în exemplul:
Multe drivere diferite SAX2 sunt comune astăzi Prin urmare, ca numele clasei pe care se poate folosi, de exemplu:
validează în mod opțional; open Source
În caz contrar, dacă nu sunteți îngrijorat peg cererea dumneavoastră la un driver SAX specific, puteți utiliza în mod direct constructorul acestuia. Presupunem că driverul pentru SAX parser XML numit com.example.xml.SAXDriver, cu toate acestea, în realitate, această clasă nu există. Trebuie să cunoașteți numele driver-ului pentru analizator dvs. de a utiliza această abordare.
Obiectul creat poate fi utilizat pentru parsarea XML-documente, dar mai întâi, trebuie să vă înregistrați stivuitoare eveniment care parser poate fi folosit pentru a transmite informații. Acest lucru se face folosind metode și interfață setContentHandler setErrorHandler XMLReader. În prezenta cerere, aceste rutine de tratare sunt, de obicei obiecte diferite, dar este un exemplu de probă, am pus aceste stivuitoare clasa de nivel superior. Astfel, trebuie să creăm clasa noastră și înregistrați-l cu XMLReader:
Exemplul de mai sus creează o instanță de MySAXApp pentru evenimente analiză XML și să îl înregistrați cu cititorul XML pentru evenimente regulate de conținut și evenimente de eroare (există și alte tipuri de evenimente, dar acestea sunt rar utilizate). Acum, să presupunem că toate argumentele de comandă rând - numele de fișiere și vom încerca să le analiza unul câte unul utilizând metoda parse de interfață XMLReader:
Rețineți că fiecare cititor trebuie să fie prezentate obiect InputSource să fie „Parsed“. Mai jos este un exemplu de clasă complet demo descris:
Puteți compila codul și rulați-l (Nu uitați să specificați SAX conducător auto org.xml.sax.driver clasa de proprietate), dar nimic mai mult acolo, cu excepția cazului în documentul dvs. nu conține XML «rău“, pentru că nu ați instalat încă handlerele SAX evenimente pentru aplicația dumneavoastră.
Lucrurile devin mai interesante atunci când începe să pună în aplicare metode pentru a răspunde la evenimente de analiză XML (amintiți-am înregistrat clasa noastră pentru evenimente de analiză XML în secțiunea anterioară). Cel mai important eveniment - începutul și sfârșitul documentului (începutul și sfârșitul documentului), începutul și sfârșitul unui element (începutul și sfârșitul elementelor), și datele cu caracter.
Pentru a afla mai multe despre începutul și sfârșitul unui document, aplicația client pune în aplicare metode și startDocument endDocument.
Manipulatorii începe / evenimente endDocument nu au argumente. În cazul în care conducătorul auto SAX găsește începutul documentului, acesta va determina funcția startDocument o dată, atunci când găsiți sfârșitul documentului - va provoca endDocuemnt (chiar dacă s-au găsit erori).
Exemplele de imprimare mesaje la ieșirea standard, dar cererea dumneavoastră poate conține orice cod pentru aceste stivuitoare, cel mai adesea, acest cod va crea un tip de copac este în memorie, pentru a încheia, pentru a face economie într-o bază de date sau de a extrage informații din fluxul XML.
SAX conducător auto va raporta elementele de început și sfârșit în același cu excepția faptului că acesta va trimite mai mulți parametri în metodele startElement și endElement.
Aceste metode vor fi tipărite la începutul și la sfârșitul fiecărui element. Înainte de numele elementului (nume local) vor fi imprimate spațiul de nume URI acolade. Parametrul qname conține numele, fără spațiul de nume XML 1.0, trebuie să utilizați toate elementele cu nici un spațiu de nume URI. În această scurtă introducere, nu vom fi privite ca atribute sunt prelucrate. Atributele pot fi obținute prin nume sau itera prin ele, ca și cum ar fi stocate într-o matrice.
În cele din urmă, transmite SAX2 (rapoarte) printr-o metodă de caractere de date caracter convențional. Următorul exemplu va imprima toate datele de caractere de pe ecran. De ieșire poate fi ușor mai lung, deoarece face să scape de caractere speciale (destul de-imprimă ieșirea prin refugierea caractere speciale):
Rețineți că șoferul SAX poate rupe date de caractere așa cum doriți, astfel încât să nu se poate baza pe faptul că toate datele cu caracter vor veni într-un singur eveniment (caractere singur eveniment).
aplicație EXEMPLU SAX2
Mai jos este un exemplu de aplicare finit (desigur, în această aplicație de tratare a evenimentului va fi pus în aplicare probabil într-o clasă separată, mai degrabă decât în formularul de cerere).
Să presupunem că procesat următorul document XML:
În cazul în care acest document este numit roses.xml și aveți un driver SAX2 în classpath numit com.example.xml.SAXDriver (dat în exemplu, de fapt, nu există), în cererea de probă poate suna ceva de genul:
Când executați, veți obține rezultate similare cu aceasta:
Rețineți că, chiar și acest document scurt generează (cel puțin) 25 de evenimente: unul la începutul și sfârșitul fiecăreia dintre cele șase elemente (tag-uri), câte unul pentru fiecare dintre fragmentele de date unsprezece simbol și unul la începutul și finalizarea documentului.
Cel mai probabil, va trebui să lucreze cu ambele tipuri de documente: documente c folosind XML namespace-uri și nu le folosesc. Documentele pot fi, de asemenea, diferite elemente (elemente componente și atribute cu spațiul de nume, nici o parte). În orice caz, asigurați-vă că codul verifică spațiul de nume URI de elemente, nu doar de numărare pe faptul că el este mereu acolo și este întotdeauna acolo.