
xml_parser_create 함수를 사용하여 XML 파서를 생성할 때, parser에 속성을 설정하는 방법은 다음과 같습니다.
1. parser에 callback 함수를 등록하는 방법은 xmlSetStructuredErrorHandler, xmlSetElementHandler, xmlSetPIHandler, xmlSetDefaultHandler, xmlSetDefaultDtdHandler, xmlSetDefaultXmlHandler, xmlSetExternalEntityRefHandler, xmlSetEntityRefHandler, xmlSetCharacterDataHandler, xmlSetStartElementHandler, xmlSetEndElementHandler, xmlSetDefaultHandlerEx 함수를 사용하여 등록할 수 있습니다.
2. parser의 다른 속성을 설정하는 방법은 다음과 같습니다.
- xmlParserCtxtPtr parser = xmlNewParserCtxt(); 함수를 사용하여 parser를 생성한 후, xmlCtxtUseOptions 함수를 사용하여 parser의 옵션을 설정할 수 있습니다.
- xmlCtxtUseOptions 함수의 옵션은 다음과 같습니다.
- XML_PARSE_NOERROR : 에러 메시지를 출력하지 않습니다.
- XML_PARSE_NOWARNING : 경고 메시지를 출력하지 않습니다.
- XML_PARSE_NOENT : 엔티티를 처리하지 않습니다.
- XML_PARSE_DTDVALID : DTD의 유효성을 검사합니다.
- XML_PARSE_NODTDDECL : DTD 선언을 처리하지 않습니다.
- XML_PARSE_XHTML : XHTML을 처리합니다.
- XML_PARSE_NOXMLDECL : XML 선언을 처리하지 않습니다.
- XML_PARSE_HUGE : XML 문서의 크기가 큰 경우 처리를 빠르게 합니다.
- XML_PARSE_NODEFDTD : DTD를 기본적으로 처리하지 않습니다.
- XML_PARSE_NODEFDATA : 데이터를 기본적으로 처리하지 않습니다.
- XML_PARSE_XINCLUDE : XInclude를 처리합니다.
- XML_PARSE_NOXINCLUSIONS : XInclude를 처리하지 않습니다.
- XML_PARSE_DTDATTList : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST2 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST3 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST4 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST5 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST6 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST7 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST8 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST9 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST10 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST11 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST12 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST13 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST14 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST15 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST16 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST17 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST18 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST19 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST20 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST21 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST22 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST23 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST24 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST25 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST26 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST27 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST28 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST29 : DTD의 속성 목록을 처리합니다.
- XML_PARSE_DTDATTLIST30 : DTD의 속성 목록을 처리합니다.
예시 코드는 다음과 같습니다.
#hostingforum.kr
c
#include
#include
int main() {
// xml_parser_create 함수를 사용하여 XML 파서를 생성
xmlDocPtr doc = xmlParseFile("example.xml");
xmlParserCtxtPtr parser = xmlNewParserCtxt();
// parser에 callback 함수를 등록
xmlSetStructuredErrorHandler(parser, myStructuredErrorHandler);
xmlSetElementHandler(parser, myStartElementHandler, myEndElementHandler);
xmlSetPIHandler(parser, myPIHandler);
xmlSetDefaultHandler(parser, myDefaultHandler);
xmlSetDefaultDtdHandler(parser, myDefaultDtdHandler);
xmlSetDefaultXmlHandler(parser, myDefaultXmlHandler);
xmlSetExternalEntityRefHandler(parser, myExternalEntityRefHandler);
xmlSetEntityRefHandler(parser, myEntityRefHandler);
xmlSetCharacterDataHandler(parser, myCharacterDataHandler);
xmlSetStartElementHandler(parser, myStartElementHandler, myEndStartElementHandler);
xmlSetEndElementHandler(parser, myEndElementHandler, myEndEndElementHandler);
// parser의 옵션을 설정
xmlCtxtUseOptions(parser, XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
return 0;
}
void myStructuredErrorHandler(void *ctx, const char *msg) {
// 에러 메시지를 처리하는 함수
}
void myStartElementHandler(void *ctx, const xmlChar *name, const xmlChar atts) {
// 시작 태그를 처리하는 함수
}
void myEndElementHandler(void *ctx, const xmlChar *name) {
// 종료 태그를 처리하는 함수
}
void myPIHandler(void *ctx, const xmlChar *target, const xmlChar *data) {
// 처리 태그를 처리하는 함수
}
void myDefaultHandler(void *ctx, const xmlChar *data, int size) {
// 기본 처리 함수
}
void myDefaultDtdHandler(void *ctx, const xmlChar *name, const xmlChar atts) {
// 기본 DTD 처리 함수
}
void myDefaultXmlHandler(void *ctx, const xmlChar *data, int size) {
// 기본 XML 처리 함수
}
void myExternalEntityRefHandler(void *ctx, const xmlChar *name, const xmlChar *systemId, const xmlChar *publicId) {
// 외부 엔티티 참조 처리 함수
}
void myEntityRefHandler(void *ctx, const xmlChar *name, const xmlChar *value) {
// 엔티티 참조 처리 함수
}
void myCharacterDataHandler(void *ctx, const xmlChar *data, int size) {
// 문자 데이터 처리 함수
}
void myStartElementHandler(void *ctx, const xmlChar *name, const xmlChar atts) {
// 시작 태그를 처리하는 함수
}
void myEndStartElementHandler(void *ctx, const xmlChar *name, const xmlChar atts) {
// 시작 태그를 처리하는 함수
}
void myEndElementHandler(void *ctx, const xmlChar *name) {
// 종료 태그를 처리하는 함수
}
void myEndEndElementHandler(void *ctx, const xmlChar *name) {
// 종료 태그를 처리하는 함수
}
2025-03-18 13:15