2012-09-18 4 views
2

저는 expat를 사용하여 xml 파서를 작성하고 있습니다. 그냥 보았다expat 함수 XML_StartElementHandler - 어떻게 사용합니까?

XML_SetElementHandler 
    XML_Parser parser, 
    XML_StartElementHandler start, 
    XML_EndElementHandler end 

나는 그것이 내가이 함수에 대한 포인터의 볼 무엇을해야하는지 이해가 안 :

typedef void (*XML_StartElementHandler)(void *userData, 
        const XML_Char *name, 
        const XML_Char **atts); 

을하지만 난 아무데도 그것을 어떻게해야 찾을 수 없습니다 도움을 얻고 싶습니다!

답변

2

구문 분석기에 두 개의 함수를 제공합니다. 두 개의 함수 중 하나는 파서가 XML 요소의 시작을 볼 때 (즉, 시작 태그를 읽은 후) 호출되고 다른 하나는 호출 될 때 호출됩니다 요소의 끝 (즉, 끝 태그를 읽습니다) (XML 구문 분석을 수행하려면 요소와 태그의 차이를 실제로 이해해야합니다). 파서가 요소의 시작에서 호출

기능은 세 개의 인수로 호출됩니다 :

  1. 처음 "사용자 데이터"로 파서에 전달 무엇에 일반 (void *) 포인터 (있는 경우 당신은 사실 그것을 통과 시켰습니다.) 이것은 콜백간에 상태를 유지하기 위해 사용하고자하는 모든 것입니다.
  2. 요소 이름의 텍스트가 포함 된 문자 배열 (즉 문자열)에 대한 포인터입니다.
  3. 요소와 연결된 속성 - 값 쌍 (즉, 시작 태그에 나열된 속성)의 각 부분에 대해 하나의 멤버가있는 문자열 배열 (여기서는 정확하지 않습니다.)에 대한 포인터입니다. 따라서 atts[i]이 속성 인 경우 atts[i+1]이 해당 값입니다.

요소의 끝 부분에 대해 호출되는 함수는 특성 목록을 가져 오지 않으므로 더 짧은 인수 서명 (IIRC 다시)을 갖습니다.

가장 일반적으로 사용되는 XML의 경우 문자 데이터 (즉, 시작 태그와 종료 태그 사이에 오는 내용)를 처리하는 문자 처리기 기능이 필요하며 반복적으로 아니요 일반적으로은 모든 문자 데이터를 한꺼번에 호출해야합니다. 그 데이터는 여러 개의 "청크"로 나올 수 있습니다.

관련 문제