XML(eXtensible Markup Language)์ W3C์์ ๊ฐ๋ฐ๋, ๋ค๋ฅธ ํน์ํ ๋ชฉ์ ์ ๊ฐ๋ ๋งํฌ์ ์ธ์ด๋ฅผ ๋ง๋๋๋ฐ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ ๋ค๋ชฉ์ ๋งํฌ์ ์ธ์ด์ด๋ค. ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋ ์์คํ ๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ์ฌ HTML์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ก๋ค. (์ถ์ฒ:https://ko.wikipedia.org/wiki/XML)
์ผ๋ จ์ ๋ฌธ์์ด์ ์๋ฏธ ์๋ ํ ๊ทผ ๋จ์๋ก ๋ถํดํ๊ณ ์ด๋ฅผ AST๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋งํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ ์ํํ๋ Parser๋ก ํฌ๊ฒ tokenizer, lexer, parser๊ฐ ์๋ค.
๊ฐ๋จํ ์ดํด๋ณด๋ฉด tokenizer๋ ์
๋ ฅ๊ฐ์ ์๋ง์ ํ ํฐ ๋จ์๋ก ๋๋ ์ฃผ๋ ์ญํ ,
lexer๋ ๋๋ ์ง ํ ํฐ๋ค์ ๋ถ์ํด ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ์ญํ ,
parser๋ ๋ถ์๋ ํ ํฐ๋ค์ ๋ฌธ๋ฒ์ ์ผ๋ก ๊ฒ์ฌํด ํ์ค ํธ๋ฆฌ๋ก ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ token์ ๋ฌธ๋ฒ์ ์ผ๋ก ๋ ์ด์ ๋๋ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ์ธ์ด์์๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ํ๋์ ํค์๋๋ ์ฐ์ฐ์ ๋๋ ๊ตฌ๋์ ๋ฑ์ด ํ ํฐ์ด ๋ ์ ์๋ค.
๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ๋ค์ํ Tokenizer๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋์ ๋ฐ๋ผ ๋ค๋ฅธ Tokenizer๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์๋ฅผ ๋ค์ด, "You know what? This is my code."
๋ผ๋ ๋ฌธ์ฅ์
์ด๋ค ๋ ๊ฐ์ง Tokenizer(๋ฌธ์ฅ์ ์๊ฒ ์ชผ๊ฐ๋, ์๋ฌธ์+๊ตฌ๋์ ์ ์ธ)๋ก๋
['You','know','what','?','This','is','my','code']
์
['you','know','what?','this','is','my','code']
๋ก ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
๊ฐ๋๋ก์ผ๋ก ์๋ฅผ ๋ค์์ ๋, ๊ธฐ๊ณ์์ ๊ฐ๋๋ก์ ๋ฝ์๋ด๋ค๊ฐ(ํ๊ธ์์ฉ ํ์ํ๋ค๊ฐ) ์ ๋นํ ๊ธธ์ด๊ฐ ๋ ๋(๋จ์ด๊ฐ ๋ ๋) ์๋ผ๋ด๋ ๊ฒ์ผ๋ก ์๊ฐํด๋ณผ ์ ์๋ค.
๊ฒฐ๊ตญ parser๋ ํ ํฐํ๋ ์์ค์ฝ๋๋ฅผ ๊ฐ์ง๊ณ AST๋ฅผ ๋ง๋๋ ์ผ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ AST๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์ด์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ฐ๊ฟ(์ปดํ์ผ) ์ค๋น๊ฐ ๋๋๊ฒ ๋๋ค.
<
๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ ์ ๊ฐ ์์๋ฅผ ํ ํฐ์ผ๋ก ์ง์
>
๊น์ง๋ฅผ ํ๊ทธ, ๊ทธ ์ดํ ๋ถ๋ถ์ text๋ก ์ง์ 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 ํธ๋ฆฌ์ ์์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ด๋ฆฐ ์์๋ ์คํ(์์ ๋ฒํผ ์ ์ฅ์)์ ์ถ๊ฐ๋๋ค. ์ด ์คํ์ ๋ถ์ ํํ ์ค์ฒฉ๊ณผ ์ข ๋ฃ๋์ง ์์ ํ๊ทธ๋ฅผ ๊ต์ ํ๋ค.
ํ์๋ ์ ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์๋ ์๋ฅผ ๋ณด์.
<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 ๊ฐ ๊ฐ์ ธ์ค๊ธฐ|์์ฑ์ David
[position()=3]
or [3]
/html/body/div/span
XPath๋ฅผ "//"๋ฅผ ์ด์ฉํด ์๋ตํ๋ฉด, ์๋์ ๊ฐ์ด ์ธ ์ ์๋ค.
//span
//body/div[2]/span
์ด๋ฐ ์์ผ๋ก ์์ ์ด๋ฆ์ ๋ช
์ํ์ง ์๋๋ผ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ฌธ๋ฒ์ ๋ง๋(well-formed) XML ๋ฌธ์๋ XML ๋ฌธ์๋ก์ ๊ฐ์ ธ์ผ ํ๋ ์ต์ํ์ ํ์ ์๊ฑด์ ์ถฉ์กฑํ XML ๋ฌธ์๋ฅผ ์๋ฏธํ๋ค.
๋ฌธ๋ฒ์ ๋ง๋(well-formed) XML ๋ฌธ์๊ฐ ๋๊ธฐ ์ํ ํ์ ์๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฃจํธ(root) ์์๋ฅผ ํ๋๋ง ๊ฐ์ ธ์ผ ํจ.
๋ชจ๋ XML ์์๋ ์ข ๋ฃ ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ผ ํจ.
์์ ํ๊ทธ์ ์ข ๋ฃ ํ๊ทธ์ ์ฌ์ฉ๋ ํ๊ทธ ์ด๋ฆ์ด ๋์๋ฌธ์๊น์ง ์๋ฒฝํ๊ฒ ์ผ์นํด์ผ ํจ.
๋ชจ๋ XML ์์์ ์ฌ๋ซ๋ ์์๊ฐ ๋ฐ๋์ ์ ํํ๊ฒ ์ง์ผ์ ธ์ผ ํจ.
๋ชจ๋ ์์ฑ์ ์์ฑ๊ฐ์ด ๋ฐ์ดํ๋ก ๋๋ฌ์ธ์ฌ ์์ด์ผ ํจ.
์์์ ์ธ๊ธํ ํ์ ์๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ XML ๋ฌธ์๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ณ HTML ๋ฌธ์์ ๋ฌ๋ฆฌ ํด๋น ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋์์ ์ค์ง์ํจ๋ค.
์ถ์ฒ: https://12bme.tistory.com/202 [๊ธธ์ ๊ฐ๋ฉด, ๋ค์ ์๋ค.]
์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ๊ฐ throw๋์๋ค๊ณ ํํํ๋ค. Throw๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ์์ธ๋ฅผ catchํด์ผ ํ๋ค. ์์ธ๊ฐ throw๋๊ณ ์ด๋ป๊ฒ๋ catch๋์ง ์์ผ๋ฉด ์คํฌ๋ฆฝํธ ์คํ์ด ์ค์ง๋๊ฒ ๋๋ค.
PowerShell๋ก (๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ง์ ์ธ์ด๋ก) ์ค๋ฅ ์ฒ๋ฆฌ ์ํํ ๋ ์ฌ์ฉ์๋ ๋จผ์ ์ฝ๋ ์ผ๋ถ๋ฅผ tryํ ๋ค์ ์ค๋ฅ๊ฐ throw๋๋ฉด catchํฉ๋๋ค. catch ์คํฌ๋ฆฝํธ๋ ์ข ๋ฃ ์ค๋ฅ๊ฐ ์์ ๋๋ง ์คํ๋๋ค. try๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋ค๋ฉด catch๋ ๊ฑด๋๋ด๋ค
๊ธฐ์กด์ XML์ ํ์ฑํ๋ฉด์ ์ฌ๋ฌ ์๋ฌ์ฒ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค. ์์์น ๋ชปํ ์ผ์ด์ค์ ์ํด ๋ด ์ฝ๋๊ฐ ํ๊ดด๋นํ ๋์ ๊ธฐ๋ถ์ด๋..ใ ใ