Mastering a szaxofon értelmező gyors indítás, dev64
Azonban SAX API nagyon fontos, és ez az alapja sok más technológia, ezért úgy döntöttem, hogy tanulmányozza a SAX API részletesebben. Az alábbiakban a fordítás anyagokat a hivatalos oldalon. Találtam őket nagyon érdekes, és megérdemli a további vizsgálat.
SAX - egy közös felületet végrehajtott számos XML parser (darab, helymeghatározás magát XML elemzők), akkor gyakorlatilag azonos számú közös API az XML, hogyan JDBC generikus interfész végre a különböző relációs adatbázisok (és shtrukovinami, helymeghatározás magát, mint a relációs adatbázis). Ha a használni kívánt SAX, szükség van az összes fenti az alábbiak szerint:
- Java 1.1 vagy modern.
- SAX2-kompatibilis XML parser megadva a Java classpath. Ha szüksége van egy ilyen elemző lásd a linkeket.
- SAX2 forgalmazás megadva a Java classpath. (Valószínűleg akkor kapja meg együtt a parser).
- A legtöbb Java / XML disztribúcióban megtalálható SAX2 elemző. A legtöbb webes alkalmazás szerverek használja dolgozni XML. Minden eloszlás támogatásával JAXP 1.1 támogatást tartalmaznak SAX2.
Elemzési egy XML dokumentum
Először hozzon létre egy osztályt, amely örökli a (nyúlik) DefaultHandler:
Hogy van a Java - alkalmazás, akkor hozzon létre egy statikus módszer fő, amely felhasználja XMLReaderFactory osztály createXMLReader módszer kiválasztásához SAX vezető dinamikusan (szoftver). Kivételkezelés eltávolítjuk a példát a könnyebb megértés érdekében. A tényleges alkalmazás kell kezelni kivételekkel:
Ha a Java fejlesztői környezet automatikusan hozzáadja a befordított alapértelmezett (vagy beállítja META-INF / services / org.xl.sax.driver rendszer erőforrás), akkor valószínűleg be kell állítani a Java rendszer tulajdonság org.xml.sax. járművezető olyan érték, amely jelzi, hogy a teljes elérési utat a SAX vezető, mint a példában:
Számos különböző SAX2 vezetők gyakori manapság Ezért, ahogy a neve az osztály segítségével, például:
Adott esetben érvényesíti; Open Source
Ellenkező esetben, ha nem aggódik szeg az alkalmazás egy adott SAX vezető, akkor a kivitelező közvetlenül. Feltételezzük, hogy a SAX illesztőprogramot XML parser nevű com.example.xml.SAXDriver azonban a valóságban ez az osztály nem létezik. Meg kell tudni, hogy a nevét, a meghajtó a értelmező, hogy ezt a megközelítést.
A létrehozott objektum használható parsolásra XML dokumentumokat, de az első, akkor regisztrálnia kell eseménykezelőkkel, hogy az elemző használható információt továbbítani. Ezt használja módszerek és setContentHandler setErrorHandler XMLReader interfész. A jelen bejelentésben, ezek rakodók általában különböző tárgyak, hanem egy minta például azt, hogy ezeket a rakodók Top-level osztály. Így létre kell hoznunk az osztály és regisztrálja azt a XMLReader:
A fenti példa létrehoz egy példányt MySAXApp XML értelmezési események és regisztrálja azt az XML olvasó rendszeres tartalmú események és hiba események (vannak más típusú események, de ezek ritkán használt). Most tegyük fel, hogy az összes parancssori érvek - a fájlneveket, és megpróbáljuk feldolgozni őket egyenként a feldolgozási eljárás XMLReader interfész:
Vegyük észre, hogy minden olvasó kell benyújtani InputSource tárgy, hogy „értelmezett”. Az alábbiakban egy teljes példa leírt demo osztály:
Akkor lefordítani a kódot, és futtatni (Ne felejtsük el, hogy meghatározza a SAX vezető osztályú ingatlanok org.xml.sax.driver), de nem sok van, kivéve, ha a dokumentum nem tartalmaz XML «rossz”, mert még nem telepítette a SAX kezelőt eseményeket az alkalmazás.
A dolgok sokkal érdekesebb, amikor elkezdi végrehajtani módszerekkel reagálni XML elemzése események (emlékszik már regisztrált mi osztály XML értelmezési események az előző részben). A legfontosabb esemény - az elején és végén a dokumentum (kezdete és vége a dokumentum), az elején és a végén egy elem (kezdete és vége elemek), és a karakter adatokat.
Ahhoz, hogy megtudjuk, az elején és végén a dokumentumot, a kliens alkalmazás végrehajtja módszerek és startDocument endDocument.
Rakodók start / endDocument események nem érvek. Amikor a SAX vezető megtalálja a dokumentum elejére, akkor okozhat startDocument funkció egyszerre, amikor megtalálja a dokumentum végén - hatására endDocuemnt (akkor is, ha hibát talált).
A példák nyomtatni üzeneteket a szabványos kimenetre, de az alkalmazás tartalmazhat bármilyen kódot ilyen rakodók, leggyakrabban, ez a kód létrehoz egy olyan típusú fa memóriában kötni, hogy megtakarítás egy adatbázisban vagy információk kinyerése XML adatfolyam.
SAX vezető jelenti a kezdetét és végét elemek nagyjából ugyanaz, kivéve, hogy küld több paramétert eljárásokban startElement és meghívott endElement.
Ezek a módszerek lesz nyomtatva elején és végén minden elem. Az elem neve előtt (helyi név) kerül kinyomtatásra névtér URI zárójelek. QName paraméter tartalmazza a nevét anélkül, hogy a névtér az XML 1.0, akkor kell használni minden olyan elem nincs névtér URI. Ebben a gyors bevezetés, akkor nem kell tekinteni, mint attribútumok kerülnek feldolgozásra. Az attribútumok állíthatók elő nevét vagy végighaladni őket, mintha tömb tárolja.
Végül SAX2 átküldi (beszámolók) egy hagyományos jellegű adatokat karakterek módszer. A következő példa kiírja az összes karaktert a képernyőn megjelenő adatok. Nyomtató valamivel hosszabb lehet, mert ez teszi menekülő speciális karakterek (nagyon-kinyomtatja a kimenet a menekülés speciális karakter):
Vegye figyelembe, hogy SAX vezető tudja törni karakteres adat, ahogy tetszik, így nem hivatkozhat arra a tényre, hogy az összes karakter adat jön egy egyszeri esemény (single karakter esetén).
Példa SAX2 alkalmazás
Az alábbiakban egy példa a kész alkalmazás (természetesen ebben az eseménykezelő alkalmazás valószínűleg megvalósítható egy külön osztály, hanem a jelentkezési lapot).
Tegyük fel, hogy a feldolgozott, a következő XML dokumentum:
Ha ez a dokumentum elemzi roses.xml és van egy SAX2 vezető a osztályútvonal nevű com.example.xml.SAXDriver (adott példában, sőt nem is létezik), a minta alkalmazás lehet hívni, valahogy így:
Amikor fut, akkor kap ehhez hasonló kimenetet ad:
Megjegyzendő, hogy még ezt a rövid dokumentumot generál (legalább) 25 események: az egyik a kezdete és befejezése, mind a hat elem (tag), egyet-egyet a tizenegy szimbólum adatokat töredékek és egy a kezdete és befejezése a dokumentumot.
A legvalószínűbb, meg kell dolgozni mindkét típusú dokumentumot: c dokumentumok segítségével az XML névtér-s és nem használja őket. A dokumentumok lehetnek különböző elemeit (rész elemeket és attribútumokat névtér része nem). Minden esetben győződjön meg arról, hogy a kód ellenőrzi a névtér URI elemek, nem csak számítok, hogy ő mindig ott van, és mindig ott van.