À̺¥Æ® ¹ß»ý ½ÃÁ¡ | À̺¥Æ® Çڵ鷯 |
* <?xml version=¡±1.0¡±?>* <product>* <name>*XML Training*</name>* <price price=¡±999.0¡± vendor=¡±Play¡±/>** <price price=¡±699.0¡± vendor=¡±XMLi¡±/>** <price price=¡±799.0¡± vendor=¡±WT¡±/>** <price price=¡±1999.0¡± vendor=¡±EM¡±/>** </product>* * |
0:startDocument() 1:processingInstruction() 2:startElement() 3:startElement() 4:characters() 5:endEl...() 6:startElement() 7:endElement() 8, 9 10, 11 ¼Ó¼ºÀº ¸Å°³º¯¼ö·Î Àü´Þ 12, 13 14:endElement() 15:endDocument() |
¡¡ |
DOM |
SAX |
Á¢±Ù ¹æ¹ý | Æ®¸® ±â¹Ý | À̺¥Æ® ±â¹Ý |
ÀåÁ¡ | ¹®¼¿¡ ÀÓÀÇ Á¢±Ù | ¸Þ¸ð¸® È¿À², ºü¸¥ ¼Óµµ |
´ÜÁ¡ | ¸Þ¸ð¸® »ç¿ë·®, ¼Óµµ ´À¸®´Ù | ±¸Á¶¿¡ ´ëÇÑ Á¢±Ù °ï¶õ, Àбâ Àü¿ë, ºê¶ó¿ìÀú Áö¿ø ¾ÈµÊ |
Àû¿ëºÐ¾ß | ±¸Á¶Àû Á¢±ÙÀÌ ÇÊ¿äÇÑ °æ¿ì, ¹®¼ Á¤º¸¸¦ ½±°Ô ÆľÇÇÏ°íÀÚ ÇÒ ¶§ |
¹®¼ ÀϺκи¸ ÀÐÀ» ¶§, µ¥ÀÌÅÍ º¯È¯½Ã, À¯È¿¼º ó¸® |
import
org.xml.sax.*; import org.xml.sax.helpers.ParserFactory; public class MyHandler extends HandlerBase { public void startElement( name, ..., AttributeList) { ... } public void endElement( name, ...) { ... } public void characters( ) { ... } ... public static void main(String[] args) throws Exception { if (args.length < 1) ... MyHandler myhand = new MyHandler( ); Parser parser = ParserFactory.makeParser(...); parser.setDocumentHandler(myhand); parser.parse(args[0]); ... } } |
Çڵ鷯 Ŭ·¡½º Á¤ÀÇ event Handler ¸ÞÀÎ command line ó¸® event handler »ý¼º parser »ý¼º event handler ÇÒ´ç parser È£Ãâ/½ÇÇà |
import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class MyHandler extends DefaultHandler { public void startDocument( ) { ... } public void endDocument( ) { ... } public void startElement(String uri, String lname, String name, Attributes atlist) { ... } public void endElement(String uri, String lname, String name) {...} public void characters(char[] ch, int start, int length ) { ... } public void processingInstruction(String target, String data) {...} ... public static void main(String[] args) throws Exception { if (args.length < 1) ... MyHandler myhand = new MyHandler( ); SAXParserFactory factory = SAXParserFactory.newInstance( ); SAXParser parser = factory.newSAXParser( ); parser.parse(args[0], myhand); ... } } |
Çڵ鷯 Ŭ·¡½º Á¤ÀÇ (DefaultHandler) event Handler ¸ÞÀÎ event handler »ý¼º parser factory »ý¼º parser »ý¼º parser È£Ãâ/½ÇÇà½Ã event handler ÇÒ´ç |
import
javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class Cheap1 extends DefaultHandler { protected double min = Double.MAX_VALUE; protected String vendor = null; // ÃÖÀú°¡, ȸ»ç¸í /* startElement event */ public void startElement(String uri, String lname, String name, Attributes atlist) { if (name.equals("price")) { String attr = atlist.getValue("price"); if (attr != null) { double price = toDouble(attr); if (min > price) { min = price; vendor = atlist.getValue("vendor"); } } } } /* helper method */ protected double toDouble(String str) { Double strDouble = Double.valueOf(str); if (strDouble != null) return strDouble.doubleValue( ); else return 0.0; } |
/* property
access : ȸ»ç¸í, ÃÖÀú°¡ */ public String getVendor( ) { return vendor; } public double getMin( ) { return min; } /* main() for command-line & parser ½ÇÇà */ public static void main(String[] args) throws Exception { if (args.length < 1) { System.out.println("java Cheap1 filename"); return; } // event handler »ý¼º Cheap1 cheap = new Cheap1( ); // parser factory ¹× parser »ý¼º SAXParserFactory factory = SAXParserFactory.newInstance( ); SAXParser parser = factory.newSAXParser( ); // parser È£Ãâ/½ÇÇà parser.parse(args[0], cheap); // °á°ú Ãâ·Â System.out.println("ÃÖÀú°¡°ÝÀº " + cheap.getVendor() + " ȸ»çÀÇ $" + cheap.getMin() + " ÀÌ´Ù."); } } |
import
javax.xml.parsers.*;
... // À§¿Í µ¿ÀÏ ... public class conv extends DefaultHandler { protected int indent = 0; // indentation level public void setDocumentLocator(Locator loc) { System.out.println("[ÆÄÀÏÁÖ¼Ò] " + loc.getSystemId()); } public void startDocument( ) { System.out.print("[level]"); } public void endDocument( ) { System.out.println("\n==============="); } public void startElement(String uri, String lname, String name, Attributes atlist) { String str = "[" + indent + "] " + name; int leng = atlist.getLength(); if (leng > 0) for (int i=0; i<leng; i++) str += " ("+i+")"+atlist.getQName(i)+"=\"" +atlist.getValue(i)+"\""; System.out.print("\n"+str); indent++; } public void endElement(String uri, String lname, String name) { indent--; } |
public void characters(char[] ch, int start, int length) { String str=""; if (length == 0) return; for (int i=0; i<length; i++) if (ch[start+i] != '\n') str += ch[start+i]; str = str.trim(); if (str != "") System.out.print(" {" + str + "} "); } public void processingInstruction(String target, String data) { System.out.print("\n<? " + target + data + " ?>"); } public static void main(String[] args) throws Exception { if (args.length < 1) { System.out.println("java conv filename"); return; } conv con = new conv( ); SAXParserFactory factory = SAXParserFactory.newInstance( ); SAXParser parser = factory.newSAXParser( ); parser.parse(args[0], con); } } |
[ÆÄÀÏÁÖ¼Ò]
file:/C:/Lec/Ex-08/price.xml [level] [0] product [1] name {XML Training} [1] price (0)price="999.0" (1)vendor="Playfield" [1] price (0)price="699.0" (1)vendor="XMLi" [1] price (0)price="799.0" (1)vendor="WT" [1] price (0)price="1999.0" (1)vendor="EM" =============== |
[ÆÄÀÏÁÖ¼Ò]
file:/C:/Lec/Ex-08/prices.xml [level] [0] products {} [1] product {} [2] name {XML Editor} {} [2] price (0)currency="usd" {499.0} {} {} [1] product {} [2] name {DTD Editor} {} [2] price (0)currency="usd" {199.0} {} {} ... =============== |