
1. XML 파싱을 시작하려면, 먼저 XML 파일을 열고 xml_set_element_handler 함수를 호출하여 callback 함수를 설정합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.
#hostingforum.kr
c
xmlParserCtxtPtr ctxt = xmlNewParserCtxt();
xmlSetStructuredErrors(ctxt, 1);
xmlSetElementHandler(ctxt, startElement, endElement);
xmlReadMemory(xmlDoc, xmlDocLen, NULL, NULL, XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
2. callback 함수를 작성하려면, xml_set_element_handler 함수에 두 개의 함수를 전달해야 합니다. 첫 번째 함수는 startElement 함수이며, XML 요소가 시작될 때 호출됩니다. 두 번째 함수는 endElement 함수이며, XML 요소가 끝날 때 호출됩니다.
#hostingforum.kr
c
void startElement(void *userData, const xmlChar *name, const xmlChar atts) {
// XML 요소의 이름과 속성을 접근할 수 있습니다.
printf("요소 이름: %sn", name);
for (int i = 0; atts[i] != NULL; i += 2) {
printf("속성 이름: %s, 속성 값: %sn", atts[i], atts[i + 1]);
}
}
void endElement(void *userData, const xmlChar *name) {
// XML 요소가 끝났을 때 호출됩니다.
printf("요소 이름: %sn", name);
}
3. callback 함수에서 XML 요소의 이름과 속성을 접근할 수 있습니다. startElement 함수에서, XML 요소의 이름은 name 변수에 저장되어 있습니다. 속성은 atts 배열에 저장되어 있습니다. endElement 함수에서, XML 요소의 이름은 name 변수에 저장되어 있습니다.
#hostingforum.kr
c
void startElement(void *userData, const xmlChar *name, const xmlChar atts) {
// XML 요소의 이름과 속성을 접근할 수 있습니다.
printf("요소 이름: %sn", name);
for (int i = 0; atts[i] != NULL; i += 2) {
printf("속성 이름: %s, 속성 값: %sn", atts[i], atts[i + 1]);
}
}
이러한 예제를 통해, xml_set_element_handler 함수를 사용하여 XML 파싱을 시작하고 callback 함수를 작성하는 방법을 이해할 수 있습니다.
2025-07-23 19:09