expat解析xml

分類:編程 時間:2017-02-01

expat用法

expat.h

五個回調函數

  userdata都是自定義參數,一般應該用戶傳入上下文參數

  //開始命名空間
 static void XMLCALL startNamespaceHandler(void* userData, const char* prefix, const char* uri);

 //開始Element節點,也就是<xxx
 static void XMLCALL startElementHandler(void* userData, const char* name, const char** attrs);

 //解析到文本>xxx<
 static void XMLCALL characterDataHandler(void* userData, const char* s, int len);

 //結束Element
 static void XMLCALL endElementHandler(void* userData, const char* name);

 //結束 Namespace
 static void XMLCALL endNamespaceHandler(void* userData, const char* prefix);

 // 註釋
 static void XMLCALL commentDataHandler(void* userData, const char* comment);


1 初始化

 //初始化函數  參數1 編碼   2 命名空間分隔符
 XML_ParserCreateNS(nullptr, kXmlNamespaceSep);


2 設置回調函數
    mParser 為第一步創建的解析對象
      XML_SetUserData(mParser, this);

    //第一個參數都是回調函數中傳出的userDat
     XML_SetElementHandler(mParser, startElementHandler, endElementHandler);
     XML_SetNamespaceDeclHandler(mParser, startNamespaceHandler, endNamespaceHandler);
     XML_SetCharacterDataHandler(mParser, characterDataHandler);
     XML_SetCommentHandler(mParser, commentDataHandler);

3  XML_Parse(mParser, mBuffer, mIn.gcount(), done) 解析



4 結束調用函數     XML_ParserFree(mParser); 釋放資源


5 其他
XML_STATUS_ERROR 解析出錯返回值
XML_ErrorString(XML_GetErrorCode(mParser)); 出錯信息
XML_GetCurrentLineNumber(mParser) 獲取行號





Tags: comment 上下文 空間 命名 用戶

文章來源:


ads
ads

相關文章
ads

相關文章

ad