expat xml 파서를 이용해서 xml을 구조화시키는(간단하게 탭정렬) 것을 하다보니, data 부분에서 파싱에러가 발생한다.
URL 등에서 &가 & 로 변환되지 않았다고
"세미콜론이(;)이 와야 합니다." 라는 문법오류가 발생한다.

아무튼 expat의 기본샘플 프로그램(?)인
xmlwf.c의 내용을  보니 별도로 이러한 특수문자를 처리하는 함수가 있었다.

static void XMLCALL
characterData(void *userData, const XML_Char *s, int len)
{
  FILE *fp = (FILE *)userData;
  for (; len > 0; --len, ++s) {
    switch (*s) {
    case T('&'):
      fputts(T("&"), fp);
      break;
    case T('<'):
      fputts(T("<"), fp);
      break;
    case T('>'):
      fputts(T(">"), fp);
      break;
#ifdef W3C14N
    case 13:
      fputts(T("&#xD;"), fp);
      break;
#else
    case T('"'):
      fputts(T("""), fp);
      break;
    case 9:
    case 10:
    case 13:
      ftprintf(fp, T("&#%d;"), *s);
      break;
#endif
    default:
      puttc(*s, fp);
      break;
    }
  }
}

아무튼, 많이 보던 녀석인데 도대체 어떤 표준인지 알수가 없는데,
검색하다 보니 iso8859-1 인것 같기도 하고.. 구분이 모호하다.
아무튼, XHTML/HTML에서 사용되는 방식인듯 하다.

Reserved Characters in HTML

Some characters are reserved in HTML and XHTML. For example, you cannot use the greater than or less than signs within your text because the browser could mistake them for markup.

HTML and XHTML processors must support the five special characters listed in the table below:

Character Entity Number Entity Name Description
" &#34; &quot; quotation mark
' &#39; &apos; (does not work in IE) apostrophe 
& &#38; &amp; ampersand
< &#60; &lt; less-than
> &#62; &gt; greater-than
Note: Entity names are case sensitive!

[링크 : http://www.w3schools.com/tags/ref_entities.asp]
[링크 : http://microweb.textcube.com/31]

'프로그램 사용 > expat & XML' 카테고리의 다른 글

xml 트리 탐색 - XML tree navigation  (0) 2010.04.17
expat XML_SetCharacterDataHandler() function  (0) 2010.04.09
expat '간략한' 사용법  (0) 2010.03.28
expat-2.0.1 example  (11) 2010.03.23
expat  (4) 2010.03.21
Posted by 구차니