[TIL] XML Parser

Narastroยท2021๋…„ 7์›” 26์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
5/16
post-thumbnail
post-custom-banner

๐Ÿš€ XML Parser

XML ?

XML(eXtensible Markup Language)์€ W3C์—์„œ ๊ฐœ๋ฐœ๋œ, ๋‹ค๋ฅธ ํŠน์ˆ˜ํ•œ ๋ชฉ์ ์„ ๊ฐ–๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ๋‹ค๋ชฉ์  ๋งˆํฌ์—… ์–ธ์–ด์ด๋‹ค. ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ์‹œ์Šคํ…œ๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ HTML์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. (์ถœ์ฒ˜:https://ko.wikipedia.org/wiki/XML)

ํŒŒ์‹ฑ(Parsing) ?

์ผ๋ จ์˜ ๋ฌธ์ž์—ด์„ ์˜๋ฏธ ์žˆ๋Š” ํ† ๊ทผ ๋‹จ์œ„๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ์ด๋ฅผ AST๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” Parser๋กœ ํฌ๊ฒŒ tokenizer, lexer, parser๊ฐ€ ์žˆ๋‹ค.

๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๋ฉด tokenizer๋Š” ์ž…๋ ฅ๊ฐ’์„ ์•Œ๋งž์€ ํ† ํฐ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์ฃผ๋Š” ์—ญํ• ,
lexer๋Š” ๋‚˜๋ˆ ์ง„ ํ† ํฐ๋“ค์„ ๋ถ„์„ํ•ด ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์—ญํ• ,
parser๋Š” ๋ถ„์„๋œ ํ† ํฐ๋“ค์„ ๋ฌธ๋ฒ•์ ์œผ๋กœ ๊ฒ€์‚ฌํ•ด ํŒŒ์Šค ํŠธ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

token ?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ token์€ ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ๊ธฐ๋ณธ์ ์ธ ์–ธ์–ด์š”์†Œ๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ํ‚ค์›Œ๋“œ๋‚˜ ์—ฐ์‚ฐ์ž ๋˜๋Š” ๊ตฌ๋‘์  ๋“ฑ์ด ํ† ํฐ์ด ๋ ์ˆ˜ ์žˆ๋‹ค.

Tokenizer ?

  • ์š”์•ฝํ•˜์ž๋ฉด Tokenization๋ฅผ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ฅผ ๋งํ•œ๋‹ค. Tokenization์ด๋ž€ Text๋ฅผ ์˜๋ฏธ์žˆ๋Š” ์š”์†Œ๋“ค์ธ ํ† ํฐ์œผ๋กœ ์ชผ๊ฐœ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉฐ ๊ทธ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ Tokenizer๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ Tokenizer๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, "You know what? This is my code."๋ผ๋Š” ๋ฌธ์žฅ์„
์–ด๋–ค ๋‘ ๊ฐ€์ง€ Tokenizer(๋ฌธ์žฅ์„ ์ž˜๊ฒŒ ์ชผ๊ฐœ๋Š”, ์†Œ๋ฌธ์ž+๊ตฌ๋‘์  ์ œ์™ธ)๋กœ๋Š”
['You','know','what','?','This','is','my','code'] ์™€
['you','know','what?','this','is','my','code']๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

lexer ?

  • lexical analysis์˜ ์•ฝ์ž๋กœ, ์–ดํœ˜ ๋ถ„์„ ๋„๊ตฌ์ด๋‹ค. ํ† ํฐ์˜ ์˜๋ฏธ๋ฅผ ๋ถ„์„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๊ฐ€๋ž˜๋–ก์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ, ๊ธฐ๊ณ„์—์„œ ๊ฐ€๋ž˜๋–ก์„ ๋ฝ‘์•„๋‚ด๋‹ค๊ฐ€(ํ•œ๊ธ€์ž์”ฉ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€) ์ ๋‹นํ•œ ๊ธธ์ด๊ฐ€ ๋  ๋•Œ(๋‹จ์–ด๊ฐ€ ๋  ๋•Œ) ์ž˜๋ผ๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Parser ?

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ๊ฒƒ์„ ๊ตฌ์กฐ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ. ๋˜ํ•œ ๊ทธ๋Ÿฌํ•œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ๊ฒ€์ฆ๋„ ํ•œ๋‹ค.

๊ฒฐ๊ตญ parser๋Š” ํ† ํฐํ™”๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  AST๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ AST๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์ด์ œ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฐ”๊ฟ€(์ปดํŒŒ์ผ) ์ค€๋น„๊ฐ€ ๋๋‚˜๊ฒŒ ๋œ๋‹ค.

๋‚ด ์ฝ”๋“œ์™€ ๋น„๊ตํ•ด๋ณด๊ธฐ

Tokenizer

<๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ๊ฐ ์š”์†Œ๋ฅผ ํ† ํฐ์œผ๋กœ ์ง€์ •

lexer

  • ๊ฐ ํ† ํฐ๋งˆ๋‹ค >๊นŒ์ง€๋ฅผ ํƒœ๊ทธ, ๊ทธ ์ดํ›„ ๋ถ€๋ถ„์„ text๋กœ ์ง€์ •
  • ํƒœ๊ทธ ์•ˆ์˜ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ attributes๋ฅผ ๋‚˜๋ˆ”
  • attributes๋Š” =์„ ๊ธฐ์ค€์œผ๋กœ name๊ณผ value๋กœ ๋‚˜๋ˆ”

Parser

  • ํƒœ๊ทธ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ•จ์ˆ˜
    ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ + br, hr, li๋Š” ์˜ˆ์™ธ๋กœ ๋‘ .
  • ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•˜๋Š” ํ•จ์ˆ˜
    ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„.

์›น๋ธŒ๋ผ์šฐ์ €์˜ DOM ํŒŒ์„œ

์›น ๋ธŒ๋ผ์šฐ์ €์˜ DOM ํŒŒ์„œ๋Š” HTML ๋ฌธ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„์„ํ• ๊นŒ?

HTML์€ ์•”๋ฌต์ ์œผ๋กœ ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋Š” ๋“ฑ ๋ฌธ๋ฒ•์ด ๋„ˆ๊ทธ๋Ÿฝ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์‹ฑํ•˜๊ธฐ ์–ด๋ ต๋‹ค. HTML ํŒŒ์‹ฑ์€ ํฌ๊ฒŒ ํ† ํฐํ™”์™€ ํŠธ๋ฆฌ ๊ตฌ์ถ• ๋‘ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

ํ† ํฐํ™”

<html>
  <body>
     Hello world
  </body>
</html>  

ํ† ํฐํ™”์˜ ๊ฒฝ์šฐ ์–ดํœ˜ ๋ถ„์„์œผ๋กœ์„œ ์—ฐ์†๋œ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ < ๋ฅผ ๋งŒ๋‚˜๋ฉด ํƒœ๊ทธ ์—ด๋ฆผ ์ƒํƒœ ๊ฐ€ ๋˜๊ณ , a-z๊นŒ์ง€์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์‹œ์ž‘ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ณ  > ๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ํƒœ๊ทธ ์ด๋ฆ„์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ดํ›„ ๋‹ค์‹œ < ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์ž๋ฃŒ ์ƒํƒœ๊ฐ€ ๋˜์–ด ํ† ํฐ์„ ๋ฐœํ–‰ ๊ฐ๊ฐ์— ๋งž๋Š” ํ† ํฐ์„ ๋ฐœํ–‰ํ•œ๋‹ค.

ํŠธ๋ฆฌ ๊ตฌ์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜

 <html>
   <body>
      Hello world
   </body>
</html>  

ํ† ํฐํ™”์— ์˜ํ•ด ๋ฐœํ–‰๋œ ๊ฐ ๋…ธ๋“œ๋Š” ์ƒ์„ฑ์ž์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๋Š”๋ฐ, ์œ„์˜ ์˜ˆ๋กœ ์„ค๋ช…ํ•˜๋ฉด html ํ† ํฐ์„ ๋ฐ›์•„ html ์ด์ „๋ชจ๋“œ์—์„œ HTMLHtmlElement ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ์ฒด ์ตœ์ƒ๋‹จ์— ์ถ”๊ฐ€๋œ๋‹ค. ์ดํ›„ head ์ด์ „๊ฐ€ ๋˜๋Š”๋ฐ ์œ„์˜ ์˜ˆ์—์„œ๋Š” ๋ฌต์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ํŠธ๋ฆฌ์— ์ถ”๊ฐ€๋œ๋‹ค. ์ด์–ด head ๋‹ค์Œ๋ชจ๋“œ๋กœ body ์•ˆ์ชฝ๋กœ ๋ฌธ์ž์—ด ํ† ํฐ์„ ๋ฐ›์•˜์œผ๋ฉด ๋ณธ๋ฌธ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ์ด์–ด ์ž‘์—…์ด ๊ณ„์†๋œ๋‹ค. </body>๋ฅผ ๋งŒ๋‚˜๋ฉด body ๋‹ค์Œ๋ชจ๋“œ๊ฐ€ ๋˜์–ด ๋งˆ์ง€๋ง‰ ํŒŒ์ผ ํ† ํฐ์„ ๋ฐ›์œผ๋ฉด ํŒŒ์‹ฑ์„ ์ข…๋ฃŒํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฌธ์„œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

DOM ํŠธ๋ฆฌ์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์—ด๋ฆฐ ์š”์†Œ๋Š” ์Šคํƒ(์ž„์‹œ ๋ฒ„ํผ ์ €์žฅ์†Œ)์— ์ถ”๊ฐ€๋œ๋‹ค. ์ด ์Šคํƒ์€ ๋ถ€์ •ํ™•ํ•œ ์ค‘์ฒฉ๊ณผ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ํƒœ๊ทธ๋ฅผ ๊ต์ •ํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

ํŒŒ์„œ๋Š” ์ ์–ด๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

  • ์–ด๋–ค ํƒœ๊ทธ์˜ ์•ˆ์ชฝ์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ํƒœ๊ทธ๊ฐ€ ๊ธˆ์ง€๋œ ๊ฒƒ์ผ ๋•Œ ์ผ๋‹จ ํ—ˆ์šฉ๋œ ํƒœ๊ทธ๋ฅผ ๋จผ์ € ๋‹ซ๊ณ  ๊ธˆ์ง€๋œ ํƒœ๊ทธ๋Š” ์™ธ๋ถ€์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ํŒŒ์„œ๊ฐ€ ์ง์ ‘ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ๋ฌธ์„œ ์ œ์ž‘์ž์— ์˜ํ•ด ๋’ค๋Šฆ๊ฒŒ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๊ณ  ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. HTML, HEAD, BODY, TBODY, TR, TD, LI ํƒœ๊ทธ๊ฐ€ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•œ๋‹ค.
  • ์ธ๋ผ์ธ ์š”์†Œ ์•ˆ์ชฝ์— ๋ธ”๋ก ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ถ€๋ชจ ๋ธ”๋ก ์š”์†Œ๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ์ธ๋ผ์ธ ํƒœ๊ทธ๋ฅผ ๋‹ซ๋Š”๋‹ค.
  • ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ๋„์›€์ด ๋˜์ง€ ์•Š์œผ๋ฉด ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์š”์†Œ๋ฅผ ๋‹ซ๋Š”๋‹ค.

์•„๋ž˜ ์˜ˆ๋ฅผ ๋ณด์ž.

  • <br> ๋Œ€์‹  </br>
    ์–ด๋–ค ์‚ฌ์ดํŠธ๋Š” <br> ๋Œ€์‹  </br>์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ, ํŒŒ์ด์–ดํญ์Šค์™€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ์›นํ‚ท์€ ์ด๊ฒƒ์„ <br> ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

  • ์–ด๊ธ‹๋‚œ ํ‘œ
    ์–ด๊ธ‹๋‚œ ํ‘œ๋Š” ํ‘œ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ํ‘œ๊ฐ€ th ๋˜๋Š” td ์…€ ๋‚ด๋ถ€์— ์žˆ์ง€ ์•Š์€ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

<table>

    <table>

    <tr><td>inner table</td></tr>

    </table>

    <tr><td>outer table</td></tr>

</table>  

์ด๋Ÿฐ ๊ฒฝ์šฐ ์›นํ‚ท์€ ํ‘œ์˜ ์ค‘์ฒฉ์„ ๋ถ„ํ•ดํ•˜์—ฌ ํ˜•์ œ ์š”์†Œ๊ฐ€ ๋˜๋„๋ก ์ฒ˜๋ฆฌํ•œ๋‹ค.

<table>

    <tr><td>outer table</td></tr>

</table>

<table>

    <tr><td>inner table</td></tr>

</table>
  • ์ค‘์ฒฉ๋œ ํผ ์š”์†Œ
    ํผ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ํผ์„ ๋„ฃ์€ ๊ฒฝ์šฐ ์•ˆ์ชฝ์˜ ํผ์€ ๋ฌด์‹œ๋œ๋‹ค.

  • ํƒœ๊ทธ ์ค‘์ฒฉ์ด ๋„ˆ๋ฌด ๊นŠ์„ ๋•Œ
    ์ตœ๋Œ€ 20๊ฐœ์˜ ์ค‘์ฒฉ๋งŒ ํ—ˆ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œํ•œ๋‹ค.

  • ์ž˜๋ชป ๋‹ซํžŒ html ๋˜๋Š” body ํƒœ๊ทธ
    ์ผ๋ถ€ ๋ฐ”๋ณด ๊ฐ™์€ ํŽ˜์ด์ง€๋Š” ๋ฌธ์„œ๊ฐ€ ๋๋‚˜๊ธฐ ์ „์— body๋ฅผ ๋‹ซ์•„๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋Š” body ํƒœ๊ทธ๋ฅผ ๋‹ซ์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ์ข…๋ฃŒ๋ฅผ ์œ„ํ•ด end()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

XPath

xpath ?

  • XPath(XML Path Language)๋Š” W3C์˜ ํ‘œ์ค€์œผ๋กœ ํ™•์žฅ ์ƒ์„ฑ ์–ธ์–ด ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ฒฝ๋กœ ์œ„์— ์ง€์ •ํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ญ๋ชฉ์„ ๋ฐฐ์น˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค. XML ํ‘œํ˜„๋ณด๋‹ค ๋” ์‰ฝ๊ณ  ์•ฝ์–ด๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ, XSL ๋ณ€ํ™˜(XSLT)๊ณผ XML ์ง€์‹œ์ž ์–ธ์–ด(XPointer)์— ์“ฐ์ด๋Š” ์–ธ์–ด์ด๋‹ค. XPath๋Š” XML ๋ฌธ์„œ์˜ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ฒฝ๋กœ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ˆ˜ํ•™ ํ•จ์ˆ˜์™€ ๊ธฐํƒ€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ‘œํ˜„๋“ค์ด ์žˆ๋‹ค.

[์ถœ์ฒ˜] : ์œ„ํ‚ค๋ฐฑ๊ณผ

๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด XPath ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

[์ถœ์ฒ˜] ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ xpath ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ|์ž‘์„ฑ์ž David

XPath์—์„œ ์š”์†Œ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • ์š”์†Œ๋Š” /
  • ์†์„ฑ์€ @
  • ์ค‘๊ฐ„ ์ƒ๋žต์€ // <-
  • ์œ„์น˜์ง€์ • [position()=3] or [3]

/html/body/div/span
XPath๋ฅผ "//"๋ฅผ ์ด์šฉํ•ด ์ƒ๋žตํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

//span
//body/div[2]/span
์ด๋Ÿฐ ์‹์œผ๋กœ ์š”์†Œ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š๋”๋ผ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

well-formed XML

๋ฌธ๋ฒ•์— ๋งž๋Š”(well-formed) XML ๋ฌธ์„œ๋ž€ XML ๋ฌธ์„œ๋กœ์„œ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ํ•„์ˆ˜ ์š”๊ฑด์„ ์ถฉ์กฑํ•œ XML ๋ฌธ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋ฌธ๋ฒ•์— ๋งž๋Š”(well-formed) XML ๋ฌธ์„œ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์š”๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฃจํŠธ(root) ์š”์†Œ๋ฅผ ํ•˜๋‚˜๋งŒ ๊ฐ€์ ธ์•ผ ํ•จ.

  2. ๋ชจ๋“  XML ์š”์†Œ๋Š” ์ข…๋ฃŒ ํƒœ๊ทธ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•จ.

  3. ์‹œ์ž‘ ํƒœ๊ทธ์™€ ์ข…๋ฃŒ ํƒœ๊ทธ์— ์‚ฌ์šฉ๋œ ํƒœ๊ทธ ์ด๋ฆ„์ด ๋Œ€์†Œ๋ฌธ์ž๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•ด์•ผ ํ•จ.

  4. ๋ชจ๋“  XML ์š”์†Œ์˜ ์—ฌ๋‹ซ๋Š” ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •ํ™•ํ•˜๊ฒŒ ์ง€์ผœ์ ธ์•ผ ํ•จ.

  5. ๋ชจ๋“  ์†์„ฑ์˜ ์†์„ฑ๊ฐ’์ด ๋”ฐ์˜ดํ‘œ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์–ด์•ผ ํ•จ.

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ•„์ˆ˜ ์š”๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” XML ๋ฌธ์„œ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  HTML ๋ฌธ์„œ์™€ ๋‹ฌ๋ฆฌ ํ•ด๋‹น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ๋™์ž‘์„ ์ค‘์ง€์‹œํ‚จ๋‹ค.

XML๊ณผ JSON

JSON์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ!!
  • JSON์€ ์œ ์—ฐํ•˜๊ณ  ์‹ ์†ํ•˜๋ฏ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„๋กœ ์ธํ•ด ์• ์ž์ผ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์„ ์ˆ˜์šฉํ•  ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • JSON์€ ์†ก์ˆ˜์‹ ๋‹จ์—์„œ ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ํŒจํ‚ค์ง€ํ™”ํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ์ถ”๊ฐ€ ์ž‘์—…์ด ์ ๊ณ  ๋งคํ•‘์ด ๋” ์‰ฝ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ ์ค‘ ์–ด๋–ค ์†์„ฑ์ด๋“  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ์‹คํ–‰ ์ค‘ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

XML์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ์‹คํ–‰ ์ค‘ ์˜ˆ์ƒ์น˜ ๋ชปํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ฒŒ ๋  ๊ฐ€๋Šฅ์„ฑ์„ ์•„์˜ˆ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ์ฟผ๋ฆฌ(Query)๊ฐ€ ์ ์šฉ๋œ XML ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ชจ๋‘ XML๋กœ ์ž‘์„ฑํ•œ ์•ฑ ๋กœ์ง(Logic) ๋“ฑ
  • XML์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • JSON์—์„œ๋Š” ๋ช…์นญ ๊ณต๊ฐ„์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ผ์ด๋‚˜ ๋ฌธ์„œ ๋“ฑ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ(Binary) ์ฝ”๋”ฉ๋œ ํŒŒ์ผ์€ XML์ด ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๊ณ  XMLํ™” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ฌธ์„œ์™€ ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
  • ์ดˆ๊ธฐ ์ž‘์—…์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค.
  • ์‹คํ–‰ ์ค‘ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ถœ์ฒ˜: https://12bme.tistory.com/202 [๊ธธ์€ ๊ฐ€๋ฉด, ๋’ค์— ์žˆ๋‹ค.]

throw / try~catch

Throw ๋ฐ Catch

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ throw๋˜์—ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. Throw๋œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์˜ˆ์™ธ๋ฅผ catchํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ์™ธ๊ฐ€ throw๋˜๊ณ  ์–ด๋–ป๊ฒŒ๋“  catch๋˜์ง€ ์•Š์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ์ค‘์ง€๋˜๊ฒŒ ๋œ๋‹ค.

Try/Catch

PowerShell๋กœ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋งŽ์€ ์–ธ์–ด๋กœ) ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ์ž๋Š” ๋จผ์ € ์ฝ”๋“œ ์ผ๋ถ€๋ฅผ tryํ•œ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ throw๋˜๋ฉด catchํ•ฉ๋‹ˆ๋‹ค. catch ์Šคํฌ๋ฆฝํŠธ๋Š” ์ข…๋ฃŒ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์‹คํ–‰๋œ๋‹ค. try๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋œ๋‹ค๋ฉด catch๋Š” ๊ฑด๋„ˆ๋›ด๋‹ค

๐ŸŽƒ ๋Š๋‚€์ 

๊ธฐ์กด์˜ XML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ€์ด์Šค์— ์˜ํ•ด ๋‚ด ์ฝ”๋“œ๊ฐ€ ํŒŒ๊ดด๋‹นํ•  ๋•Œ์˜ ๊ธฐ๋ถ„์ด๋ž€..ใ…Žใ…Ž

์ถœ์ฒ˜

profile
Earn this, Earn it.
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€