개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.18 13:14

XML 파서 생성에 대한 도움을 요청합니다.

  • 코딩테스트러버 12시간 전 2025.03.18 13:14 새글
  • 6
    1
저는 XML 파서를 생성하는 부분에서 막혔습니다. xml_parser_create 함수를 사용하여 XML 파서를 생성할 때, parser에 어떤 속성을 설정해야 하는지 알려주세요.

저는 parser에 callback 함수를 등록하고자 하는데, 이 callback 함수를 등록하는 방법을 알려주세요. 그리고 parser의 다른 속성을 설정하는 방법도 알려주세요.

아래는 예시 코드입니다.

c

#include 

#include 



int main() {

    // xml_parser_create 함수를 사용하여 XML 파서를 생성

    xmlDocPtr doc = xmlParseFile("example.xml");

    xmlParserCtxtPtr parser = xmlNewParserCtxt();



    // parser에 callback 함수를 등록하는 방법은 어떻게 하나요?

    // parser의 다른 속성을 설정하는 방법을 알려주세요.



    return 0;

}



위의 코드에서 parser에 callback 함수를 등록하고 다른 속성을 설정하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  12시간 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 4,480건 / 4 페이지

검색

게시물 검색