hero_xmlContentHandler.cpp
上传用户:quanyou
上传日期:2022-06-07
资源大小:39k
文件大小:3k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1.  // HERO_XMLContentHandler.cpp: derived class from SAXContentHandlerImpl
  2.  
  3. #include "stdafx.h"
  4. #include "HERO_XMLContentHandler.h"
  5. #include <wchar.h>
  6. #include "Test_Sax.h"
  7. #include "Test_SaxDlg.h"
  8. //HTREEITEM ht[12];
  9. //////////////////////////////////////////////////////////////////////
  10. // Construction/Destruction
  11. //////////////////////////////////////////////////////////////////////
  12. //CListBox* list_m;
  13. HERO_XMLContentHandler::HERO_XMLContentHandler()
  14. {
  15. _wsetlocale(0,L"chs");
  16. idnt = 0;
  17. i=0;
  18. k=0;
  19. }
  20. HERO_XMLContentHandler::~HERO_XMLContentHandler()
  21. {
  22. //object destruction is handled by the Release() impl of parent class
  23. }
  24. //hides the new operator
  25. HERO_XMLContentHandler * HERO_XMLContentHandler::CreateInstance()
  26. {
  27. HERO_XMLContentHandler * pHERO_XMLContentHandler = NULL;
  28. pHERO_XMLContentHandler = new HERO_XMLContentHandler();
  29. assert(pHERO_XMLContentHandler!=NULL);
  30. return pHERO_XMLContentHandler;
  31. }
  32. HRESULT STDMETHODCALLTYPE HERO_XMLContentHandler::startDocument( void)
  33. {
  34.     return S_OK;
  35. // return E_FAIL;     //The parse operation should be aborted. 
  36. }
  37. HRESULT STDMETHODCALLTYPE HERO_XMLContentHandler::endDocument( void)
  38. {
  39.     return S_OK;
  40. // return E_FAIL;     //The parse operation should be aborted. 
  41. }
  42. HRESULT STDMETHODCALLTYPE HERO_XMLContentHandler::startElement( 
  43.             /* [in] */ wchar_t __RPC_FAR *pwchNamespaceUri,
  44.             /* [in] */ int cchNamespaceUri,
  45.             /* [in] */ wchar_t __RPC_FAR *pwchLocalName,
  46.             /* [in] */ int cchLocalName,
  47.             /* [in] */ wchar_t __RPC_FAR *pwchRawName,
  48.             /* [in] */ int cchRawName,
  49.             /* [in] */ ISAXAttributes __RPC_FAR *pAttributes)
  50. {
  51. m_bflag=0;
  52.  
  53.    // A little example, how to abort parse
  54.    if ( wcsncmp(pwchLocalName,L"name",4) == 0 ) {
  55.       m_bflag=1;
  56.    }
  57.     return S_OK;
  58. }
  59. HRESULT STDMETHODCALLTYPE HERO_XMLContentHandler::endElement( 
  60.             /* [in] */ wchar_t __RPC_FAR *pwchNamespaceUri,
  61.             /* [in] */ int cchNamespaceUri,
  62.             /* [in] */ wchar_t __RPC_FAR *pwchLocalName,
  63.             /* [in] */ int cchLocalName,
  64.             /* [in] */ wchar_t __RPC_FAR *pwchRawName,
  65.             /* [in] */ int cchRawName)
  66. {
  67.     return S_OK;
  68. // return E_FAIL;     //The parse operation should be aborted. 
  69. }
  70. HRESULT STDMETHODCALLTYPE HERO_XMLContentHandler::characters( 
  71.             /* [in] */ wchar_t __RPC_FAR *pwchChars,
  72.             /* [in] */ int cchChars)
  73. {
  74.    static wchar_t val[1000];
  75.   CTest_SaxDlg *pdlg=(CTest_SaxDlg *)AfxGetMainWnd();
  76.  cchChars = cchChars>999 ? 999 : cchChars;
  77.    wcsncpy( val, pwchChars, cchChars );
  78.   val[cchChars] = 0;
  79.   CString str2;
  80. for(int j=0;j<cchChars;j++)
  81. if(val[j]<32)
  82. return S_OK;
  83. wcstombs(str2.GetBufferSetLength(1000),val,1000);
  84. if(!str2.IsEmpty())
  85. if(m_bflag)
  86. {SetWindowText(GetDlgItem(pdlg->m_hWnd,IDC_HERO1+i),str2);i++;}
  87. else
  88. {SetWindowText(GetDlgItem(pdlg->m_hWnd,IDC_HERO11+k),str2); k++;}
  89.   str2.ReleaseBuffer();
  90. return S_OK;
  91. // return E_FAIL;     //The parse operation should be aborted. 
  92. }