'프로그램 사용/expat & XML'에 해당되는 글 12건

  1. 2010.03.23 expat-2.0.1 example 11
  2. 2010.03.21 expat 4
expat-2.0.1 에 포함되어있는 예제파일인
elements.c를 약간 변형하여

XML tag로 출력되도록 약간 수정하였다.
컴파일에 필요한 libexpat.lib 파일과 expat.h 파일
그리고 테스트용 XML 파일(youtube page)가 포함되어있다.
(libexpat.lib는 내부적으로 libexpat.dll을 호출하는 것으로 보인다.)



/* This is simple demonstration of how to use expat. This program
reads an XML document from standard input and writes a line with
the name of each element to standard output indenting child
elements by one tab stop more than their parent element.
It must be used with Expat compiled for UTF-8 output.
*/

#include "stdio.h"
#include "expat.h"

#if defined(__amigaos__) && defined(__USE_INLINE__)
#include "proto/expat.h"
#endif

#ifdef XML_LARGE_SIZE
#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
#define XML_FMT_INT_MOD "I64"
#else
#define XML_FMT_INT_MOD "ll"
#endif
#else
#define XML_FMT_INT_MOD "l"
#endif

static void XMLCALL
startElement(void *userData, const char *name, const char **atts)
{
	int i;
	int *depthPtr = (int *)userData;
	for (i = 0; i < *depthPtr; i++)
		putchar('\t');
	printf("<%s>\n",name);
//	puts(name);
	*depthPtr += 1;
}

static void XMLCALL
endElement(void *userData, const char *name)
{
	int i;
	int *depthPtr = (int *)userData;
	*depthPtr -= 1;
	for (i = 0; i < *depthPtr; i++)
		putchar('\t');
	printf("</%s>\n",name);
	//	puts(name);
}

int
main(int argc, char *argv[])
{
	FILE *fp;
	char buf[BUFSIZ];
	XML_Parser parser = XML_ParserCreate(NULL);
	int done;
	int depth = 0;
	
	fp = fopen("GetRecentlyFeaturedVideoFeed.xml","r");
	
	XML_SetUserData(parser, &depth);
	XML_SetElementHandler(parser, startElement, endElement);
	do {
		int len = (int)fread(buf, 1, sizeof(buf), fp);
		done = len < sizeof(buf);
		if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
			fprintf(stderr,
				"%s at line %" XML_FMT_INT_MOD "u\n",
				XML_ErrorString(XML_GetErrorCode(parser)),
				XML_GetCurrentLineNumber(parser));
			return 1;
		}
	} while (!done);
	XML_ParserFree(parser);
	fclose(fp);
	return 0;
}

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

xml 트리 탐색 - XML tree navigation  (0) 2010.04.17
expat XML_SetCharacterDataHandler() function  (0) 2010.04.09
&amp; &lt; &gt; &quot; 는 머지?  (0) 2010.03.31
expat '간략한' 사용법  (0) 2010.03.28
expat  (4) 2010.03.21
Posted by 구차니
expat은 c언어로 작성된 XML 파서이다.
음.. c라고는 하지만, python 2.6 에서는 expat을 기본 XML 파서로 내장한다.

아래는 expat 홈페이지와, c에서 expat을 사용하는 예제들이 들어있다.
링크만 발견하고 실제로 사용해보진 못했지만,
handler역활을 하는 함수를 추가하여,
그 함수들을 태그의 시작이나 끝 그리고 데이터 부분에서 호출하게 되는것으로 보인다.

[링크 : http://expat.sourceforge.net/]
    [링크 : http://www.vivtek.com/xmltools/]
    [링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/XML/expat_xml]

python2.6의 expat 예제
실제로 windows에서 2.6으로 돌려보니 결과가 조금 다르게 나왔다.
원래 문서에는 출력된 문자열 앞에 u가 붙어있지 않다.(unicode 문자열을 알리는 접두?)
>>> p.Parse("""<?xml version="1.0"?>
... <parent id="top"><child1 name="paul">Text goes here</child1>
... <child2 name="fred">More text</child2>
... </parent>""", 1)
Start element: parent {u'id': u'top'}
Start element: child1 {u'name': u'paul'}
Character data: u'Text goes here'
End element: child1
Character data: u'\n'
Start element: child2 {u'name': u'fred'}
Character data: u'More text'
End element: child2
Character data: u'\n'
End element: parent
1

[링크 : http://docs.python.org/library/pyexpat.html]

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

xml 트리 탐색 - XML tree navigation  (0) 2010.04.17
expat XML_SetCharacterDataHandler() function  (0) 2010.04.09
&amp; &lt; &gt; &quot; 는 머지?  (0) 2010.03.31
expat '간략한' 사용법  (0) 2010.03.28
expat-2.0.1 example  (11) 2010.03.23
Posted by 구차니