SAX - Simple API for XML

revised: Oct./26th/03

SAX$B$N35MW(B

SAX$B!J(BSimple API for XML$B!K$b(BDOM$B$HF1MM$NF/$-$r$9$k(BXML$B%Q!<%5MQ$N(BAPI$B$G$9!#(B

SAX$B$O!"%a!<%j%s%0%j%9%H(BXML-DEV$B$N%3%i%\%l!<%7%g%s$K$h$jCB@8$7!"9q:]E*$JI8=`2=CDBN$K$h$k;EMM$G$O$J$$$K$b4X$o$i$:!"%G%U%!%/%H!&%9%?%s%@!<%I!J;ve$NI8=`!"6H3&I8=`!K$H$J$C$F$$$k(BAPI$B$G$9!#(BJava$BMQ$N%$%Y%s%H6nF07?$N7ZNL$J(BAPI$B$G$"$j!"%i%s%@%`%"%/%;%9$d9=B$$NJQ99$H$$$C$?MW7o$K$OCHqNL!"

DOM$B$N>l9g$O!"2r@O$7$?7k2L$r@EE*$JLZ9=B$$GJV$7$^$7$?!#MWAG$dFbMF$O!"(BDOM$B%D%j!<$N3F%N!<%I$H$7$F07$o$l$^$9!#0lJ}!"(BSAX$B$O!"%$%Y%s%H6nF07?$N(BAPI$B$G!"2r@O7k2L$K$h$j!"J8=q$N3+;O!"MWAG$N3+;O$J$I$N%$%Y%s%H$r@8@.$7!"%"%W%j%1!<%7%g%s$O%$%Y%s%H$r

$B0lJ}!"(BSAX$B$O%a%b%j$N>CHqNL$,>/$J$/9bB.$G$9!#(BDOM$B$O@EE*$J9=B$$rJ];}$9$k$N$G!"9=B$$KBP$9$kJQ99$dJ#?tJ8=q4V$r$^$?$0A`:n$J$I$GJXMx$G$9$,!"(BDOM$B%D%j!<$r@EE*$K%a%b%j>e$KJ];}$9$k$?$a!"5pBg$J(BXML$BJ8=q$N>l9g$O%a%b%j$r05Gw$7$+$M$^$;$s!#(BSAX$B$O!"5pBg$J(BXML$BJ8=q$KBP$9$k=hM}$d!"9=B$$rJQ$($J$$>l9g$J$I$KJXMx$G$9!#(B

SAX$B$K$h$kBEEv@-8!>Z(B

$B%$%Y%s%H6nF07?$H$$$C$F$b!"%$%a!<%8$,$o$-$:$i$$;W$$$^$9$,!"

$B%j%9%H(B1$B$O!"!V(BJAXP$B$K$h$k(BDOM$B2r@O(B$B!W$G>R2p$7$?!"BEEv@-8!>Z$r9T$&(BDOM$B%Q!<%5$G$"$k(B$B%j%9%H(B10$B$r(BSAX$B$rMQ$$$F

$B%/%i%9(BSAXParseDemo$B$O(BSAX$B%Q!<%5$r;H$&%a%$%s$N%/%i%9$G$9!#(BSAX$B%Q!<%5$K$O!"%$%s%?%U%'!<%9(Borg.xml.sax.XMLReader$B$r2p$7$F%"%/%;%9$7$^$9!#$=$N@\(Bnew$B$9$k$N$G$O$J$/!"%U%!%/%H%j!

  1. createXMLReader(String className)$B$N0z?t(B
  2. $B%7%9%F%`!&%W%m%Q%F%#(Borg.xml.sax.driver$B$NCM(B
  3. JAR$B%U%!%$%k$N(BMETA-INF/services/org.xml.sax.driver
  4. $B%7%9%F%`!&%G%U%)%k%H(B

$B%/%i%9(BMySAXHandler$B$O!"%X%k%Q!5$7$F$*$j!"%$%Y%s%H$r

$B%j%9%H(B1. SAXParseDemo.java

import org.w3c.dom.*;
import org.apache.xerces.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
class SAXParseDemo {
    public static void main(String[] args) {
        try {
            // SAX$B%Q!<%5$N@8@.(B
            XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
            // $B%U%#!<%A%c!<$N@_Dj(B
            parser.setFeature("http://xml.org/sax/features/validation",true);
            parser.setFeature("http://apache.org/xml/features/validation/schema",true);
            parser.setFeature("http://xml.org/sax/features/namespaces",true);
            // $B%O%s%I%i$N@8@.(B
            DefaultHandler handler = new MySAXHandler();
            // $B%O%s%I%i$NEPO?(B
            parser.setContentHandler(handler);
            parser.setDTDHandler(handler);
            parser.setErrorHandler(handler);
            // $B2r@O(B
            parser.parse(args[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
class MySAXHandler extends DefaultHandler {
    // ContentHandler$B$N

DOM$B%"%W%j%1!<%7%g%s(B$B%j%9%H(B10 (DomParseDemo4.java)$B$HF1MM$K!"(B$B%j%9%H(B1 (SAXParseDemo.java)$B$G!"(B$B%j%9%H(B11 (demo6.xml)$B$r=hM}$9$k$H!"%j%9%H(B2$B$N$h$&$K$J$j$^$9!#(B

$B%j%9%H(B2. SAX$B$K$h$k

>javac SAXParseDemo.java
>java SAXParseDemo demo6.xml
startDocument()
startElement()
        namespace=urn:address
        local name=address
        qualified name=hlq:address
        attribute name=schemaLocation
        attribute qualified name=xsi:schemaLocation
        attribute value=urn:address address.xsd
characters()
$B%(%i!<(B: 5$B9TL\(B
cvc-enumeration-valid: Value 'man' is not facet-valid with respect to enumeratio
n '[male, female]'. It must be a value from the enumeration.
$B%(%i!<(B: 5$B9TL\(B
cvc-attribute.3: The value 'man' of attribute 'sex' on element 'hlq:item' is not
 valid with respect to its type, 'null'.
startElement()
        namespace=urn:address
        local name=item
        qualified name=hlq:item
        attribute name=sex
        attribute qualified name=sex
        attribute value=man
        attribute name=custid
        attribute qualified name=custid
        attribute value=E21099
characters()
startElement()
        namespace=urn:address
        local name=name
        qualified name=hlq:name
characters()$B?{0f!!3X(B
endElement()
characters()
startElement()
        namespace=urn:address
        local name=access
        qualified name=hlq:access
        attribute name=kind
        attribute qualified name=kind
        attribute value=email
characters()
endElement()
characters()
...
C:\java\xml>

JAXP$B$K$h$k(BSAX$B2r@O(B

DOM$B$N>l9g$HF1$8$/!"(BSAX$B$b(BJAXP$B$G5-=R$9$k$3$H$b$G$-$^$9!#%j%9%H(B19$B$O!"(B$B%j%9%H(B1$B$N%/%i%9(BSAXParseDemo$B$r!"(BJAXP$B$N(BAPI$B$G5-=R$7$?$b$N$G$9!#(B

$B%j%9%H(B3. JAXP$B$K$h$k(BSAX (SAXParseDemo2.java)

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
class SAXParseDemo2 {
    public static void main(String[] args) {
        try {
            // SAX$B%Q!<%5$N%U%!%/%H%j!<$N@8@.(B
            SAXParserFactory factory = SAXParserFactory.newInstance();
            // $B%U%#!<%A%c!<$N@_Dj(B
            factory.setValidating(true);
            factory.setNamespaceAware(true);
            factory.setFeature("http://apache.org/xml/features/validation/schema",true);
            // SAX$B%Q!<%5$N@8@.(B
            SAXParser parser = factory.newSAXParser();
            // $B%O%s%I%i$N@8@.(B
            DefaultHandler handler = new MySAXHandler();
            // $B2r@O(B
            parser.parse(args[0],handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

$B%j%9%H(B3$B$r%3%s%Q%$%k$7$F(B demo6.xml $B$r2r@O$9$k$H!"(B$B%j%9%H(B1$B$N$B%j%9%H(B2$B!K$HF1MM$N7k2L$,F@$i$l$k$3$H$,3NG'$G$-$^$9!#(B



Copyright © 2003 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送