Juwan Park :: XML에서 CDATA란 무엇인가?

XML에서 CDATA란 무엇인가?

★프로그래밍/HTML, CSS, JS, XML :: 2016. 8. 19. 17:41

XML 문서를 보면 가끔 <![CDATA[ ... ]]> 이런 처리가 되어 있는 것을 볼 수 있습니다.

그럼 이 CDATA라는 게 과연 무엇인가 하는 궁금증이 드실 분도 계실 텐데요...

일단 CDATA가 무슨 뜻이냐 하면, 그것은 바로 'Character Data'. 즉, '문자 데이터'를 말하는 것입니다. 그런데 이 용어를 좀 더 정확하게 말하면 '(Unparsed) Character Data'. 즉, '파싱하지 않는 문자 데이터'라는 뜻입니다. 반대로, 파싱하는 문자 데이터는 'PCDATA'라고 부릅니다.

이게 왜 있는지 궁금하다면, 일단 다음 XML 문서를 봅시다.

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
  <term>
    <entry>볼드</entry>
    <description>글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.</description>
  </term>
</dictionary>

이 XML 파일에 무슨 문제가 있는 것일까요? 그래서 XML 파싱 프로그램을 써서 이 XML 파일대로 텍스트를 출력하게 해 보면,

볼드
글씨를 굵은 글씨로 강조한다. ... 태그를 사용한다.  대신 을 사용해도 된다.

이렇게 출력될 것입니다. 그런데 뭔가 이상합니다. 마땅히 들어가야 할 부분이 몇 군데 빠져 있습니다.

<b>, </b>, <strong> 이 세 개가 온데간데없습니다. 왜 그런 것일까요?

이유는 간단합니다. XML 파서가 <description>...</description> 내용도 어김없이 파싱할 대상으로 인식하기 때문입니다. 즉, 안에 있는 <b>와 <string>도 태그로 인식해 버려서 제대로 출력이 되지 않습니다.

그러면, 이를 막으려면 어떻게 하면 될까요? HTML 태그라면 < 대신 &lt;, > 대신 &gt;를 쓰면 되겠지만 XML에서는 더 좋은 방법이 있습니다. 당연히 <description> 안의 내용은 파싱할 수 없게 만들면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
  <term>
    <entry>볼드</entry>
    <description><![CDATA[글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.]]></description>
  </term>
</dictionary>

이렇게 고치고 다시 한 번 파싱해 봅시다.

볼드
글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.

이제서야 제대로 나오네요.

이렇듯 <![CDATA[ ... ]]>는 안에 들어가는 텍스트가 파싱되지 않게 하는 기능을 합니다. 이는 파서가 잘못 파싱할 수 있는 텍스트를 다룰 때, 파서의 잘못된 파싱을 방지할 수 있게 하는 것입니다. 예를 들자면 HTML 태그를 텍스트 데이터로 쓴다거나 할 때 등을 들 수 있겠습니다.


많은 도움 되셨나요?

유용한 정보로 활용하시기 바랍니다.

TAG ,

댓글을 달아 주세요.

Today 27    Yday 25    Tot 73,535
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP