Java XML, Json - swkim0128/PARA GitHub Wiki


type: Java archive: false

๊ณต๊ณต๋ฐ์ดํ„ฐ์™€ XML

๊ณต๊ณต๋ฐ์ดํ„ฐ๋ž€?


๊ณต๊ณต๊ธฐ๊ฐ„์ด ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ชจ๋“  ๊ณต์ ์ธ ์ •๋ณด

๊ฐ ๊ณต๊ณต๊ธฐ๊ด€์ด ๋ณด์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐœ๋ฐฉํ•˜์—ฌ ๋ˆ„๊ตฌ๋‚˜ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ํ™œ์šฉ ๊ฐ€๋Šฅ

www.data.go.kr ๋“ฑ ํšŒ์› ๊ฐ€์ž… ํ›„ ๊ฐœ๋ณ„ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์•„ ์‚ฌ์šฉ

XML


Markup Language

ํƒœ๊ทธ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์„œ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…๊ธฐํ•˜๋Š” ์–ธ์–ด

HTML, SGML, ...

XML

Extensible Markup Language

HTML๊ณผ ๋‹ฌ๋ฆฌ ํ•„์š”์— ๋”ฐ๋ผ์„œ ํƒœ๊ทธ๋ฅผ ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ •ํ™•ํ•œ ๋ฌธ๋ฒ•์„ ์ง€์ผœ์•ผ ๋™์ž‘ : Well formed

๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๋ฌธ์„œ์˜ ์‹œ์ž‘์€ ๋กœ ํ•œ๋‹ค.

๋งŒ๋“œ์‹œ root element๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋‚˜๋จธ์ง€ ํƒœ๊ทธ๋“ค์€ Tree ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

์‹œ์ž‘ํƒœ๊ทธ์™€ ์ข…๋ฃŒ ํƒœ๊ทธ๋Š” ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

์‹œ์ž‘ ํƒœ๊ทธ๋Š” key-value๊ตฌ์กฐ์˜ ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

์†์„ฑ ๊ฐ’์€ "" ๋˜๋Š” ''๋กœ ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•œ๋‹ค.

๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•œ๋‹ค.

vaild

xml ํƒœ๊ทธ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ดˆ ์ž‘์„ฑ์ž์˜ ์˜๋„๋Œ€๋กœ ์ž‘์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•  ํ•„์š”(DTD ๋˜๋Š” Schema๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์„œ์˜ ๊ทœ์น™ ์ž‘์„ฑ)

XMLํŒŒ์‹ฑ


ํŒŒ์‹ฑ

๋ฌธ์„œ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ํƒœ๊ทธ๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ณ  ๋‚ด์šฉ์„ ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •

SAX parser

Simple API for XML parser

๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ํƒœ๊ทธ์˜ ์‹œ์ž‘, ์ข…๋ฃŒ ๋“ฑ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

๋น ๋ฅด๊ณ  ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ํƒ์ƒ‰์ด ์–ด๋ ต๋‹ค.

DOM parser

Document Object Model

๋ฌธ์„œ๋ฅผ ๋‹ค ์ฝ๊ณ  ๋‚œ ํ›„ ๋ฌธ์„œ ๊ตฌ์กฐ ์ „์ฒด๋ฅผ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹

๋‹ค์–‘ํ•œ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋А๋ฆฌ๊ณ  ๋ฌด๊ฑฐ์šฐ๋ฉฐ ํฐ ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

SAX(Simple API for XML) Parser


์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค ๊ตฌ์„ฑ

public class BoxOffice {
	private Integer rank;
	private String movieNm;
	private Date openDt;
	private Integer audiAcc;

	public Date toDate(String date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return format.arse(date);
		}
		catch (ParseException e) {
			e.printStackTrace();
			return new Date();
		}
	}
}

Handler ์ž‘์„ฑ

public class BoxOfficeSaxParser extends DefaultHandler {
	private final Fild xml = new File(".../boxoffice.xml");
	private List<BoxOffice> list = new ArrayList<>();
	private BoxOffice current;
	private String content;
	public List<BoxOffice> getBoxOffice() {
		try {
			SAXParserFactory factory = SAXParserFactory.newInstance();
			SAXParser parser = factory.newSAXParser();
			parser.parse(xml, this);
		}
		catch (IOException | SAXException | ParserConfigurationException e) {
			e.printStackTrace();
		}
		return list;
	}

	@Override
	public void startDocument() throws SAXException {
		Syste.out.println("๋ฌธ์„œ์‹œ์ž‘");
	}

	@Override
	public void endDocument() throws SAXException {
		System.out.println("๋ฌธ์„œ ์ข…๋ฃŒ");
	}

	@Override
	public void startElement(String uri, String localname, String qName, 
										Attributes attirbutes) throws SAXException {
		if (qName.equals("dailyBoxOffice")) {
			current = new BoxOffice();
		}
	}

	@Override
	public void characters(char[]ch, int start, int length) throws SAXException {
		this.content = new String(ch, start, length);
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if (qName.equals("dailyBoxOffice")) {
			list.add(current);
			current = null;
		}
		else if (qName.equals("rank")) {
			current.setRank(Integer.parseInt(content));
		}
		else if (qName.equals("movieNm")) {
			current.setMovieNm(Integer.parseInt(content));
		}
		else if (qName.equals("openDt")) {
			current.setOpenDt(current.toDate(this.content));
		}
		else if (qName.equals("audiAcc")) {
			current.setAudiAcc(Integer.parseInt(content));
		}
	}
}

XML ํŒŒ์‹ฑ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ

public class SaxParserTest {
	public static void main(String[] args) {
		BoxOfficeSaxParser hanlder = new BoxOfficeSaxParser();

		List<BoxOffice> list = hanlder.getBoxOffice();
		for (BoxOffice boxOffice : list) {
			System.out.println(boxOffice);
		}
	}
}

DOM Parser


DOM Tree

๋ฌธ์„œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ Node(ํƒœ๊ทธ, ์†์„ฑ, ๊ฐ’)๋กœ ๊ตฌ์„ฑ

ํƒœ๊ทธ๋“ค์€ root ๋…ธ๋“œ(์ฃผ์†Œ๋ก)์„ ์‹œ์ž‘์œผ๋กœ ๋ถ€๋ชจ-์ž์‹์˜ ๊ด€๊ณ„ ๊ตฌ์„ฑ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ