PageRenderTime 94ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/commoncpp2-1.8.1/demo/xmlfetch.cpp

#
C++ | 134 lines | 80 code | 13 blank | 41 comment | 3 complexity | c43a8b52ba25b9aaa64fb9a926eb8acd MD5 | raw file
Possible License(s): GPL-2.0
  1. // Copyright (C) 2001-2005 Open Source Telecom Corporation.
  2. // Copyright (C) 2006-2008 David Sugar, Tycho Softworks.
  3. //
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. //
  18. // As a special exception to the GNU General Public License, permission is
  19. // granted for additional uses of the text contained in its release
  20. // of Common C++.
  21. //
  22. // The exception is that, if you link the Common C++ library with other
  23. // files to produce an executable, this does not by itself cause the
  24. // resulting executable to be covered by the GNU General Public License.
  25. // Your use of that executable is in no way restricted on account of
  26. // linking the Common C++ library code into it.
  27. //
  28. // This exception does not however invalidate any other reasons why
  29. // the executable file might be covered by the GNU General Public License.
  30. //
  31. // This exception applies only to the code released under the
  32. // name Common C++. If you copy code from other releases into a copy of
  33. // Common C++, as the General Public License permits, the exception does
  34. // not apply to the code that you add in this way. To avoid misleading
  35. // anyone as to the status of such modified files, you must delete
  36. // this exception notice from them.
  37. //
  38. // If you write modifications of your own for Common C++, it is your choice
  39. // whether to permit this exception to apply to your modifications.
  40. // If you do not wish that, delete this exception notice.
  41. #include <cc++/common.h>
  42. #include <iostream>
  43. #include <cstdlib>
  44. #ifdef CCXX_NAMESPACES
  45. using namespace std;
  46. using namespace ost;
  47. #endif
  48. class myXMLParser : public URLStream, public XMLStream
  49. {
  50. private:
  51. void httpHeader(const char *header, const char *value) {
  52. cout << "HEADER " << header << "=" << value << endl;
  53. }
  54. int read(unsigned char *buffer, size_t len) {
  55. URLStream::read((char *)buffer, len);
  56. len = gcount();
  57. return len;
  58. }
  59. void startDocument(void) {
  60. cout << "START DOCUMENT" << endl;
  61. }
  62. void endDocument(void) {
  63. cout << "END DOCUMENT" << endl;
  64. }
  65. void characters(const unsigned char *text, size_t len) {
  66. cout << "CHARS=";
  67. while(len--)
  68. cout << *(text++);
  69. cout << endl;
  70. }
  71. void comment(const char *text) {
  72. cout << "COMMENT=" << text << endl;
  73. }
  74. void startElement(const unsigned char *name, const unsigned char **attr) {
  75. cout << "<" << name;
  76. if(attr) {
  77. while(*attr) {
  78. cout << " " << *(attr++);
  79. cout << "=" << *(attr++);
  80. }
  81. }
  82. cout << ">" << endl;
  83. }
  84. void endElement(const unsigned char *name) {
  85. cout << "</" << name << ">" << endl;
  86. }
  87. public:
  88. void Close(void) {
  89. URLStream::close();
  90. }
  91. };
  92. int main(int argc, char **argv)
  93. {
  94. myXMLParser xml;
  95. URLStream::Error status;
  96. // url.setProxy("home.sys", 8000);
  97. #ifdef CCXX_EXCEPTIONS
  98. try {
  99. #endif
  100. while(--argc) {
  101. ++argv;
  102. cout << "fetching " << *argv << endl;
  103. status = xml.get(*argv);
  104. if(status) {
  105. cout << "failed; reason=" << status << endl;
  106. xml.Close();
  107. continue;
  108. }
  109. cout << "Parsing..." << endl;
  110. if(!xml.parse())
  111. cout << "not well formed..." << endl;
  112. xml.Close();
  113. cout << ends;
  114. }
  115. #ifdef CCXX_EXCEPTIONS
  116. }
  117. catch(...) {
  118. cerr << "url " << *argv << " failed" << endl;
  119. }
  120. #endif
  121. }