출처: http://java.sun.com/xml/tutorial_intro.html
개념: SAXParser가 org.xml.sax.helpers.DefaultHandler에게 파싱된 tag(element)와 text를 차례로 전달한다.
import java.io.*;
import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser;
public class Echo01 extends DefaultHandler { public static void main(String argv[]) { if (argv.length != 1) { System.err.println("Usage: cmd filename"); System.exit(1); }
// Use an instance of ourselves as the SAX event handler DefaultHandler handler = new Echo01(); // Use the default (non-validating) parser SAXParserFactory factory = SAXParserFactory.newInstance(); try { // Set up output stream out = new OutputStreamWriter(System.out, "UTF8");
// Parse the input SAXParser saxParser = factory.newSAXParser(); saxParser.parse( new File(argv[0]), handler);
} catch (Throwable t) { t.printStackTrace(); } System.exit(0); }
static private Writer out;
//=========================================================== // SAX DocumentHandler methods //===========================================================
public void startDocument() throws SAXException { emit("<?xml version='1.0' encoding='UTF-8'?>"); nl(); }
public void endDocument() throws SAXException { try { nl(); out.flush(); } catch (IOException e) { throw new SAXException("I/O error", e); } }
public void startElement(String namespaceURI, String lName, // local name String qName, // qualified name Attributes attrs) throws SAXException { String eName = lName; // element name if ("".equals(eName)) eName = qName; // namespaceAware = false emit("<"+eName); if (attrs != null) { for (int i = 0; i < attrs.getLength(); i++) { String aName = attrs.getLocalName(i); // Attr name if ("".equals(aName)) aName = attrs.getQName(i); emit(" "); emit(aName+"=\""+attrs.getValue(i)+"\""); } } emit(">"); }
public void endElement(String namespaceURI, String sName, // simple name String qName // qualified name ) throws SAXException { emit("</"+sName+">"); }
public void characters(char buf[], int offset, int len) throws SAXException { String s = new String(buf, offset, len); emit(s); }
//=========================================================== // Utility Methods ... //===========================================================
// Wrap I/O exceptions in SAX exceptions, to // suit handler signature requirements private void emit(String s) throws SAXException { try { out.write(s); out.flush(); } catch (IOException e) { throw new SAXException("I/O error", e); } }
// Start a new line private void nl() throws SAXException { String lineEnd = System.getProperty("line.separator"); try { out.write(lineEnd); } catch (IOException e) { throw new SAXException("I/O error", e); } } } |
'JAVA' 카테고리의 다른 글
자바 소켓(java socket) InputStreamReader를 사용한 기초적 사용 (0) | 2014.02.19 |
---|---|
자바 소켓( java socket ) 가장기초 server client (0) | 2014.02.19 |
JAVA 하루전날짜 구하는 메소드 (0) | 2014.02.19 |
Java POI로 엑셀 파일 조작하기 (0) | 2014.02.19 |
Serializable 객체직렬화 (0) | 2014.02.14 |
DWR(Direct Web Rmoting) (0) | 2014.02.12 |
request, Parameter, Attribute, Sesstion 정리 (0) | 2014.02.12 |
XStream 관련 클래스를 활용한 XML 언마샬링 예제 (0) | 2014.02.03 |